第 5 篇
撤销本地提交
上一章我们一起入门学习了git的基本概念和git基础操作,包括提交和同步代码、使用分支、出现代码冲突的解决办法、紧急保存现场和恢复现场的操作。几乎已经足够我们使用Git参加协作开发了。但是在开发的过程中难免会出错,万一一不小心提交提交了不可饶恕的东西,难说会让我们丢掉工作,那怎么办呢。下面让我们一起来diss老板。
先说一句蠢话来diss老板
如果你发现刚刚的操作一不小心commit了,所幸你还没有推送到远程仓库,你可以用reset
命令来撤消你的这次提交。
reset
命令的作用:重置HEAD(当前分支的版本顶端)到另外一个commit。
我们来创建一个文件,并附带提交信息[+]骂了我的boss,达到下图的效果
我们使用以下命令达到这样的效果:
- 创建to_boss.txt文件,并向其写入了
my boss is a bad guy!
-
git add
然后status
查看新文件已经加入跟踪 -
git commit
提交了这次的修改
撤消了本次提交
好了,刚刚我们“不小心”diss了我们的老板,要是被发现就完了,所幸还没有push
,要快点撤消这些提交,再拍下马屁才行。
先撤销掉现在的提交达到下图的效果
我们使用以下命令达到这样的效果:
-
git reset --soft head^
撤消了本次提交,将工作区恢复到了提交前但是已经add
的状态 - 将
to_boss.txt
的内容改成了my boss is a good boy!
好了,我们现在改成怕马屁的话了,虽然我并不赞成大家给老板拍马屁,但是刚刚骂老板的话实在把人吓得不轻。我们赶快把他提交掉吧,一会老板看见估计要给我加工资了。
修改to_boss.txt的内容,同时创建一个提交信息为[+]夸了我的boss的提交,如下图
我们使用以下命令达到这样的效果:
add
然后commit
提交
好了,有惊无险,这就是撤消commit的操作。
我们的撤消当前提交的时候往往不希望我们此次提交的代码发生任何丢失,只是撤消掉commit的操作,以便我们继续修改文件。
正常我们想达到上图的效果,宝贵的代码放回到暂存区,如果我们是想直接不要了这次commit的全部内容的任何修改那就把git reset --soft head^
改成git reset --hard head^
,这样你本地修改就彻底丢掉了(一定要小心啊,不然代码白写了),如果真用了想找回来怎么办?我们后面【救命的后悔药】一节会和大家详细讨论。
当然了,你只要开心,不加soft
或hard
参数也是安全的(相当于使用了--mixed
参数),只不过是撤消以后你的本次修改就会回到add
之前的状态,你可以重新检查以后再做修改和commit
也可以。
小结
通过今天的三分钟,我们学会了如下命令
- git reset --soft head^ 软撤销,head^是指当前commit,可以改成任意commit id
- git reset --hard head^ 硬撤销,彻底丢掉这次提交的全部修改
- git reset 不加参数,本次修改就会回到
add
之前的状态