# 暂时保存没有提交的工作
$ git stash
$ git stash save '这是提交备注'
# 列出所有暂时保存的工作
$ git stash list
stash@{0}: WIP on workbranch: 56cd5d4 Revert "update old files"
stash@{1}: WIP on project1: 1dd87ea commit "fix typos and grammar"
# 恢复某个暂时保存的工作
$ git stash apply stash@{1}
# 恢复最近一次stash的文件
$ git stash pop
# 丢弃最近一次stash的文件
$ git stash drop
# 删除所有的stash
$ git stash clear
- git cherry-pick
部分合并,命令”复制”一个提交节点并在当前分支做一次完全一样的新提交
$ git cherry-pick 2c33a
# 将当期分支的指针倒退三个 commit,
# 并且会改变暂存区
$ git reset HEAD~3
# 倒退指针的同时,不改变暂存区
$ git reset --soft HEAD~3
# 倒退指针的同时,改变工作区
$ git reset --hard HEAD~3
# 撤销上一次向暂存区添加的所有文件
$ git reset
# 无任何效果
$ git reset --soft
# 同时撤销暂存区和工作区的修改,
# 回复到上一次提交的状态
$ git reset --hard
# 撤销上一次向暂存区添加的某个指定文件,
# 不影响工作区中的该文件
$ git reset -- <filename>
# -a参数用于先将所有工作区的变动文件,提交到暂存区,再运行git commit。用了-a参数,就不用执行git add .命令了
$ git commit -am "message"
#--allow-empty参数用于没有提交信息的 commit
$ git commit --allow-empty
#--amend参数用于撤销上一次 commit,然后生成一个新的 commit
$ git commit --amend - m "new commit message"
#--squash 表示当前添加的 commit 应该与以前某一个 commit 合并成一个,以后执行互动式的git rebase的时候,这两个 commit 将会合并成一个
$ git commit --squash <commit>
#git rebase 将当前分支移植到指定分支或指定commit之上
$ git rebase -i <commit>
$ git rebase -i master~3
- git bisect
用来查找哪一次代码提交引入了错误
#首先,检查一下代码提交历史,可以看到,这个库一共有101次提交。最早的第一次提交的哈希是4d83cf
$ git log --pretty=oneline
#启动查错
$ git bisect start [终点] [起点]
#比如起点是第一次提交4d83cf,终点是最近一次的HEAD。指定其他范围也可以
$ git bisect start HEAD 4d83cf //执行此命令以后,代码库就会切换到这段范围正当中的那一次提交,本例是第51次提交。
#启动项目,发现正常,使用git bisect good命令,标识本次提交(第51次)没有问题。
$ git bisect good
#第51次提交没有问题,就意味着错误是在代码历史的后半段引入的。执行上面的命令,Git 就自动切换到后半段的中点(第76次提交)。
#启动项目,发现不正常。使用git bisect bad命令,标识本次提交(第76)有问题。
$ git bisect bad
#执行上面的命令以后,Git 就自动切换到第51次到第76次的中点(第63次提交)。
#不断重复这个过程,直到成功找到出问题的那一次提交为止。这时,Git 会给出如下的提示。
$ b47892 is the first bad commit
#既然找到那个有问题的提交,就可以[检查代码]确定具体是什么错误。然后,使用`git bisect reset`命令,退出查错,回到最近一次的代码提交。
$ git bisect reset
#之后就可以开始修复错误了。
网友评论