1、常用命令
1.1 用户名和邮箱
修改全局用户名和邮箱
git config --global user.name "用户名"
git config --global user.email "邮箱"
查看用户名和邮箱
git config user.name
git config user.email
1.2 提交
# 添加所有文件到暂存区
git add .
# 提交到本地仓库
git commit -m '修改了首页'
# 拉取远程默认仓库到本地仓库,进行合并
git pull origin master
# 提交本地仓库代码到服务器
git push origin master
1.3 查看
查看状态
git status
查看变更内容
git diff
1.4 关联
1.4.1 与远程仓库关联
git remote set-url --add origin 远程仓库地址
1.5 分支
1.5.1 显示分支
# 显示本地所有分支
git branch
# 显示远程所有分支
git branch -r
# 显示本地和远程所有分支
git branch -a
# 更新远程主机 origin 整理分支
git remote update origin --prune
1.5.2 新建分支
继承当前分支进度
# 新建分支,但还停留在当前分支
git branch [brabch-name]
# 新建分支,并切换到该分支
git checkout -b [brabch-name]
# 新建分支,并与远程仓库分支建立关联
git checkout -b [brabch-name] origin/[brabch-name]
1.5.3 删除分支
# 删除指定分支
git branch -d [brabch-name]
# 删除远程分支
git push origin --delete [brabch-name]
git push origin :[brabch-name]
1.5.4 切换分支
# 切换到指定分支
git checkout [brabch-name]
# 切换到上一个分支
git checkout -
1.5.5 合并分支
git merge [brabch-name]
# 取消合并
git merge --abort
1.5.6 提交分支
git push --set-upstream origin [brabch-name]
# 拉取远程分支
git clone -b [brabch-name] 地址
git checkout [brabch-name] origin/[brabch-name]
1.5.7 克隆分支
# 克隆远程master分支
git clone 地址
# 克隆远程dev分支
git checkout -b dev origin/dev
1.5.8 刷新远程分支
git remote update origin --prune
1.6 回退
# 查看完整信息
git log
# 查看简略信息
git log --oneline
# 回退到指定版本
git reset --hard commit_id
# 回退到上一个版本
git reset --hard HEAD^
# 查看已关掉的完整信息
git reflog
1.7 忽略追踪文件
git rm -r --cached 文件夹
git rm -r --cached 文件
1.8 git rebase
1.8.1 合并 commit
# 1. 取出最近的3次commit
git rebase -i HEAD~3
# 2. 编辑,第一条记录使用 pick,其他使用 s(压缩)
# 3. Esc 保存, :wq 退出
# 4. 编辑最新的commit信息, Esc 保存, :wq 退出
1.8.2 合并分支
# 功能分支
git rebase dev
# 开发分支
git merge feature
1.9 git stash
# 执行存储时,添加备注,方便查找
git stash save "save message"
# 查看stash了哪些存储
git stash list
# 显示做了哪些改动,默认 show 第一个存储。如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1}
git stash show
# 显示第一个存储的改动,如果想显示其他存存储,命令:git stash show stash@{$num} -p ,比如第二个:git stash show stash@{1} -p
git stash show -p
# 应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1}
git stash apply
# 应用某个存储,将缓存堆栈中的对应stash删除,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1}
git stash pop
# 丢弃 stash@{$num} 存储,从列表中删除这个存储
git stash drop stash@{$num}
# 删除所有缓存的stash
git stash clear
1.10 git revert
创建一次新的commit 来回退某次或某几次commit的一种方式
# 创建一个新的commit,这个commit会删除(下面)commit-id的内容,但会在log中保留这个commit-id
git revert commit-id
# 批量回退 这个是前开后闭, 只revert了...和commit-id-end, commit-id-start没有撤销
git revert commit-id-start...commit-id-end
# 加上^ 就是前闭后闭,都撤销了
git revert commit-id-start^...commit-id-end
例子:
原始log
31f6a64 (HEAD -> master) 提交 3
98d937c 提交 2
af02354 提交 1
目录下的内容为:
➜ revert_test git:(master) ls
1.txt
2.txt
3.txt
现在想删除 98d937c 的提交
git revert 98d937c
再看目录下的内容为:
➜ revert_test git:(master) ls
1.txt
3.txt
说明确实去掉了98d937c 的提交内容(即2.txt 不在了)
再看日志:
d1ea1e9 (HEAD -> master) Revert "提交 2"
31f6a64 提交 3
98d937c 提交 2
af02354 提交 1
发现,其实是通过一次新的提交来删除98d937c 的提交内容的(这里可以看出之前的commit-id依然在)
再看批量回退日志记录
a74b9bb (HEAD -> master) 提交 6
e3bbc59 提交 5
223171c 提交 4
d1ea1e9 Revert "提交 2"
31f6a64 提交 3
98d937c 提交 2
af02354 提交 1
现在回退 提交4 和提交5
git revert 223171c^...e3bbc59
看日志
af51f68 (HEAD -> master) Revert "提交 4"
1a5d0c0 Revert "提交 5"
a74b9bb 提交 6
e3bbc59 提交 5
223171c 提交 4
d1ea1e9 Revert "提交 2"
31f6a64 提交 3
98d937c 提交 2
af02354 提交 1
产生了两次revert提交commit