美文网首页
如何修改已完成的提交

如何修改已完成的提交

作者: 醉看红尘这场梦 | 来源:发表于2020-03-13 17:51 被阅读0次

    我们创建了自己的第一个仓库,并且,在其中创建了两次提交记录。一旦理解了git中为文件创建快照的思路,git用起来就舒服多了。但在现实的工作中,我们不可能不犯错,当我们刚提交完就发现,文件里有个typo,该怎么办呢?

    例如,在之前的最后一次提交中,我们故意在hello.txt创建了一个typo:“Hello Wrold”。

    image

    为了解决这个问题,针对我们所处的环境,各有不同的解决办法。

    与别人共享代码时的处理方法

    如果,我们已经和别人共享了这部分代码(例如:已经把代码提交到了GitHub)。这时,我们只能修改typo之后,然后重新addcommit一次。

    自己在本地管理代码时的处理方法

    如果,我们只是在本地使用git自己管理代码,情况就简单多了。这时,我们有两种处理方法。

    一种,是使用git reset先撤销掉这次错误的提交,修改之后再重新提交。reset命令支持一个参数,我们可以传递--hard或者--soft。其中,--soft表示撤销提交,但是保留这次提交对文件的修改

    例如,我们可以执行:

    git reset --soft ae960b6382412a8290314168bbf8c67520732591
    
    

    这里,ae960b6382412a8290314168bbf8c67520732591表示要返回的目标,我们可以从git log查看到这个ID。

    这时,执行一下git status,可以看到hello.txt是准备提交状态,而它的内容,仍旧是提交前的Hello Wrold!。我们可以把它修改之后,重新addcommit

    重新提交之后,再来看--hard参数的效果。这次,我们执行:

    git reset --hard ae960b6382412a8290314168bbf8c67520732591
    
    

    git就会在终端提示下面的信息:

    image

    执行git status,就会发现,我们修改hello.txt这个事情,已经彻底从git的记录中清除了,也就是说,hello.txt不仅回到了ae960b6这次提交,在这之后我们对这个文件的所有操作也被丢掉了:

    image

    而这,就是在撤销提交记录的时候,--soft--hard的差别。实际上,我们很少会直接使用--hard,因为用了,reset之后发生的事情就都追不回来了。

    第二种方法,我们可以直接把修改typo添加到之前的提交里。为了演示这个方法,我们先把hello.txt的内容恢复成“Hello Wrold!”,并重新addcommit来恢复场景。

    完成后,假设现在我们发现这个错误了,直接把这个typo改过来,并执行git add hello.txt。这次,提交的时候,我们直接使用--amend参数:

    git commit --amend
    
    

    git会打开编辑器,默认显示最近一次提交的日志:

    image

    当然我们也不用改,因为这本来就是这次提交的目的,我们只是改了一个typo而已,直接保存退出就好了。这样,最后这次提交就包含正确的内容了。

    相关文章

      网友评论

          本文标题:如何修改已完成的提交

          本文链接:https://www.haomeiwen.com/subject/melyjhtx.html