一、git reset
当文件版本冲突太多时候,rebase就不太好使了, 没个edit都要fix conflict。那么可以通过reset 来解决。
git reset commitid
reset到版本B,这时候工作区的修改就是CD的修改内容了,那么冲洗作为一次提交,CD提交就会被干掉,如图1.3所示,直接把E强推到远端即可。
二、git commit --amend
前一秒提交了msg,后1s发现提交msg感觉描述不太好想改怎么办?好办,有2种办法。
- reset HEAD^,重新提交。
- git commit --amend修改提交内容即可。
三、git rebase
有多个记录想要修改怎么办?
好办,git rebase -i commitid
将指针移动到某个版本,将这个版本之后的提交全部重新提交一遍。
如图1.5所示,我要修改435781d的内容,那么我就需要rebase到435781d的上一个版本92212dd。
如图1.6所示,会将要修改提交消息的版本以及该版本之后的版本
由上到下
都列出来。看注释中的几个关键字的含义:
p:当版本指针知指到使用e标记的版本这里,使用该提交,即直接把这个版本的提交作为新的提交,然后继续执行下一个版本。
e: ,当版本指针知指到使用e标记的版本这里则停下来,使用该提交,用户可以输入git commit --amend 来修改提交记录,然后git rebase --continue 继续下一次提交。
r:当版本指针知指到使用e标记的版本这里,使用该提交,但是会停下来给出的是vim编辑提交msg界面,修改msg后继续下一个提交。
s: 压缩,当前指针指向的的提交压缩到上一个次提交内,如将第二行换pick换成s,则ca55e2c提交会和435718d合并到一起。注意:这个会保留ca55e2c的提交记录,保留提交记录如图1.7所示。
f: 和s一样,只是不保留提交msg。
四、git stash
当我们修改一些文件之后,没有完成一个功能的开发,这时候保存一次提交又不合适,所以需要暂存。
git stash
将修改加入到暂存栈中。-
git stash list
暂存的修改可以通过git stash list列出来。如图1.8所示。
git stash pop
将暂存栈的第一个修改弹出,并应用到工作区。git stash apply stash@{index}
应用暂存栈的某个修改。