本节课学习怎么修正已提交的commit。

工作流中,咱们在提交代码时的描绘,是会有约定的,比方完结了一个功用,提交的描绘就必须是“feature:描绘”。比方修正了一个bug,提交的描绘必须是“fixbug#bugId:描绘”。比方做了一次兼并,提交描绘就必须是“merge:描绘”。有些时分,咱们的描绘信息会写错,或许漏写。那么咱们就需求修正之前的提交信息。

当然,代码改错了,或许某次提交忘记了带上某个源文件修正。这些状况,都需求重新修正之前的提交信息。

修正最终一次的commit

比方,我现在有一个开发分支dev,上面现已有了4个commit,如图所示:

[Git修改提交]刚提交了代码,发现写错了怎么办

修正提交信息

我发现提交信息不一致,我需求把最终一次commit信息改成: 4。 那么咱们能够运用git commit --amend这个指令来修正。 输入指令:

[Git修改提交]刚提交了代码,发现写错了怎么办

会弹出下面的信息,这便是最终一次commit的描绘信息,不过是vim打开的,假如要修正,按i(或许a,o都能够),进入修正形式

[Git修改提交]刚提交了代码,发现写错了怎么办

修正完结后,按ESC,退出修正形式,再按:wq,回车保存退出。这样,最终一次commit的描绘信息就修正完结了。

运用git log指令检查commit信息。能够看到,最终一次提交的信息现已改成了4

[Git修改提交]刚提交了代码,发现写错了怎么办

最终推送代码,运用git push,咱们会发现推送报错。这是由于git push默许只推送新的提交,咱们现在是没有新提交的,只是修正了已有的提交。所以咱们要运用git push --force

[Git修改提交]刚提交了代码,发现写错了怎么办

咱们再看下长途的提交状况,现已改过来了。

[Git修改提交]刚提交了代码,发现写错了怎么办

当然,这儿还有一个愈加快速的方法,在调用amend时,直接修正描绘。

[Git修改提交]刚提交了代码,发现写错了怎么办
[Git修改提交]刚提交了代码,发现写错了怎么办

修正提交中的代码

假如要修正代码呢,比方现在我的readme文件内容是修正 4。我需求把他改成修正 4.2。把文件内容修正后,咱们仍是用git commit --amend指令。如下图,咱们能够看到,描绘和文件都修正完结了。

[Git修改提交]刚提交了代码,发现写错了怎么办
[Git修改提交]刚提交了代码,发现写错了怎么办
[Git修改提交]刚提交了代码,发现写错了怎么办

修正之前某次commit

假如要修正之前的某次提交,咱们就不能用amend了,amend只能修正当前分支最终一次修正。这次咱们需求用到git rebaseGit 自身没有提供一个改动前史的工具,可是能够运用变基工具(rebase)来改动提交。

git rebase交互式变基给你一个它将会运转的脚本。 它将会从你在指令行中指定的提交开端,从上到下的依次重演每一个提交引入的修正。 它将最旧的而不是最新的列在上面,由于那会是第一个将要重演的。 比方咱们指定 修正3 开端rebase,那么 修正3 和 4.2 都会被重新提交。 假如指定rebase到其他分支,比方master分支,那么 修正3 和 4.2 会被复制到master上。 rebase用多了简单导致代码紊乱,不要乱用!!

比方,咱们想把倒数第2次提交的修正3改成3。那么运用git rebase咱们能够像下面这么写。这儿的HEAD~2是指选择最新提交往前2个提交。

[Git修改提交]刚提交了代码,发现写错了怎么办

弹出下面的信息。这儿列出了HEAD~2之后的两个提交,也便是 修正3 和 4.2 。 咱们能够对这两个都进行修正。具体修正的指令下面列出来了。

[Git修改提交]刚提交了代码,发现写错了怎么办

比方咱们要修正 修正3 这个提交,那么咱们就要把 修正3 前面的pick改成edit。这个也是vim修正,和前面相同,按i(或许a,o都能够),进入修正形式,修正好后,在按ESC退出修正形式,再输入:wq回车保存退出。

[Git修改提交]刚提交了代码,发现写错了怎么办

保存好,会给出下一步的提示,咱们持续运用git commit --amend修正描绘信息。

[Git修改提交]刚提交了代码,发现写错了怎么办

修正完结后,咱们看看日志,会发现修正3现已改成3了,可是4.2不见了。这是由于rebase是逐一去重演提交的,现在只完结了一个提交(修正3)的重演,4.2的重演还没有开端。

[Git修改提交]刚提交了代码,发现写错了怎么办

依照上面的提示,咱们运转git rebase –continue。

[Git修改提交]刚提交了代码,发现写错了怎么办

最终看下作用,提交信息都满足咱们的要求了。

[Git修改提交]刚提交了代码,发现写错了怎么办

需求抛弃某个commit

现在咱们发现提交 “2”属于无用提交,需求删掉。怎么操作。咱们仍是运用rebase。前面的rebase运转后,有一个drop指令,这个便是移除commit的。

[Git修改提交]刚提交了代码,发现写错了怎么办

或许咱们能够直接删去对应的提交。

[Git修改提交]刚提交了代码,发现写错了怎么办

保存后,会有可能呈现代码兼并的问题,由于rebase是变基,会重新提交后面的每一次提交。所以假如前后代码有抵触,就会需求解决后再提交。和前面相同,需求持续运转git rebase --continue,直到悉数提交都完结。最终结果如图。

[Git修改提交]刚提交了代码,发现写错了怎么办

假如分支现已push到长途

不建议再运用rebase了, 由于现已push到了长途,你不知道别人有没有同步到本地, 假如别人现已同步到了本地,你再去修正,就很简单出问题。 这种状况下,运用全能办法,提交一个新commit,把前面的过错都修正好,并在commit信息中阐明详细状况。。。

总结

本课首要提到两个指令

  • git commit -amend。这个是修正最终一次提交的指令。
  • git rebase -i HEAD~xrebase是变基操作,便是重新提交HEAD~x后面的所有提交,经过这种办法来修正前史提交内。

敞开成长之旅!这是我参加「日新方案 2 月更文应战」的第 12 天,点击检查活动详情