我们创建了自己的第一个仓库,并且,在其中创建了两次提交记录。一旦理解了git
中为文件创建快照的思路,git
用起来就舒服多了。但在现实的工作中,我们不可能不犯错,当我们刚提交完就发现,文件里有个typo,该怎么办呢?
例如,在之前的最后一次提交中,我们故意在hello.txt创建了一个typo:“Hello Wrold”。
image为了解决这个问题,针对我们所处的环境,各有不同的解决办法。
与别人共享代码时的处理方法
如果,我们已经和别人共享了这部分代码(例如:已经把代码提交到了GitHub)。这时,我们只能修改typo之后,然后重新add
和commit
一次。
自己在本地管理代码时的处理方法
如果,我们只是在本地使用git
自己管理代码,情况就简单多了。这时,我们有两种处理方法。
一种,是使用git reset
先撤销掉这次错误的提交,修改之后再重新提交。reset
命令支持一个参数,我们可以传递--hard
或者--soft
。其中,--soft
表示撤销提交,但是保留这次提交对文件的修改。
例如,我们可以执行:
git reset --soft ae960b6382412a8290314168bbf8c67520732591
这里,ae960b6382412a8290314168bbf8c67520732591
表示要返回的目标,我们可以从git log
查看到这个ID。
这时,执行一下git status
,可以看到hello.txt是准备提交状态,而它的内容,仍旧是提交前的Hello Wrold!。我们可以把它修改之后,重新add
和commit
。
重新提交之后,再来看--hard
参数的效果。这次,我们执行:
git reset --hard ae960b6382412a8290314168bbf8c67520732591
git
就会在终端提示下面的信息:
执行git status
,就会发现,我们修改hello.txt这个事情,已经彻底从git
的记录中清除了,也就是说,hello.txt不仅回到了ae960b6
这次提交,在这之后我们对这个文件的所有操作也被丢掉了:
而这,就是在撤销提交记录的时候,--soft
和--hard
的差别。实际上,我们很少会直接使用--hard
,因为用了,reset
之后发生的事情就都追不回来了。
第二种方法,我们可以直接把修改typo添加到之前的提交里。为了演示这个方法,我们先把hello.txt的内容恢复成“Hello Wrold!”,并重新add
和commit
来恢复场景。
完成后,假设现在我们发现这个错误了,直接把这个typo改过来,并执行git add hello.txt
。这次,提交的时候,我们直接使用--amend
参数:
git commit --amend
git
会打开编辑器,默认显示最近一次提交的日志:
当然我们也不用改,因为这本来就是这次提交的目的,我们只是改了一个typo而已,直接保存退出就好了。这样,最后这次提交就包含正确的内容了。
网友评论