本节课学习怎么修正已提交的commit。
在工作流中,咱们在提交代码时的描绘,是会有约定的,比方完结了一个功用,提交的描绘就必须是“feature:描绘”。比方修正了一个bug,提交的描绘必须是“fixbug#bugId:描绘”。比方做了一次兼并,提交描绘就必须是“merge:描绘”。有些时分,咱们的描绘信息会写错,或许漏写。那么咱们就需求修正之前的提交信息。
当然,代码改错了,或许某次提交忘记了带上某个源文件修正。这些状况,都需求重新修正之前的提交信息。
修正最终一次的commit
比方,我现在有一个开发分支dev
,上面现已有了4个commit
,如图所示:
修正提交信息
我发现提交信息不一致,我需求把最终一次commit
信息改成: 4
。 那么咱们能够运用git commit --amend
这个指令来修正。
输入指令:
会弹出下面的信息,这便是最终一次commit
的描绘信息,不过是vim
打开的,假如要修正,按i(或许a,o都能够),进入修正形式
修正完结后,按ESC
,退出修正形式,再按:wq
,回车保存退出。这样,最终一次commit
的描绘信息就修正完结了。
运用git log
指令检查commit
信息。能够看到,最终一次提交的信息现已改成了4
。
最终推送代码,运用git push
,咱们会发现推送报错。这是由于git push
默许只推送新的提交,咱们现在是没有新提交的,只是修正了已有的提交。所以咱们要运用git push --force
。
咱们再看下长途的提交状况,现已改过来了。
当然,这儿还有一个愈加快速的方法,在调用amend
时,直接修正描绘。
修正提交中的代码
假如要修正代码呢,比方现在我的readme文件内容是修正 4
。我需求把他改成修正 4.2
。把文件内容修正后,咱们仍是用git commit --amend
指令。如下图,咱们能够看到,描绘和文件都修正完结了。
修正之前某次commit
假如要修正之前的某次提交,咱们就不能用amend
了,amend
只能修正当前分支最终一次修正。这次咱们需求用到git rebase
。Git 自身没有提供一个改动前史的工具,可是能够运用变基工具(rebase
)来改动提交。
git rebase
交互式变基给你一个它将会运转的脚本。 它将会从你在指令行中指定的提交开端,从上到下的依次重演每一个提交引入的修正。 它将最旧的而不是最新的列在上面,由于那会是第一个将要重演的。 比方咱们指定 修正3 开端rebase
,那么 修正3 和 4.2 都会被重新提交。 假如指定rebase
到其他分支,比方master
分支,那么 修正3 和 4.2 会被复制到master
上。 rebase用多了简单导致代码紊乱,不要乱用!!
比方,咱们想把倒数第2次提交的修正3
改成3
。那么运用git rebase
咱们能够像下面这么写。这儿的HEAD~2
是指选择最新提交往前2个提交。
弹出下面的信息。这儿列出了HEAD~2
之后的两个提交,也便是 修正3 和 4.2 。 咱们能够对这两个都进行修正。具体修正的指令下面列出来了。
比方咱们要修正 修正3 这个提交,那么咱们就要把 修正3 前面的pick
改成edit
。这个也是vim
修正,和前面相同,按i(或许a,o都能够),进入修正形式,修正好后,在按ESC
退出修正形式,再输入:wq
回车保存退出。
保存好,会给出下一步的提示,咱们持续运用git commit --amend
修正描绘信息。
修正完结后,咱们看看日志,会发现修正3
现已改成3
了,可是4.2
不见了。这是由于rebase
是逐一去重演提交的,现在只完结了一个提交(修正3
)的重演,4.2
的重演还没有开端。
依照上面的提示,咱们运转git rebase –continue。
最终看下作用,提交信息都满足咱们的要求了。
需求抛弃某个commit
现在咱们发现提交 “2”属于无用提交,需求删掉。怎么操作。咱们仍是运用rebase
。前面的rebase
运转后,有一个drop
指令,这个便是移除commit
的。
或许咱们能够直接删去对应的提交。
保存后,会有可能呈现代码兼并的问题,由于rebase
是变基,会重新提交后面的每一次提交。所以假如前后代码有抵触,就会需求解决后再提交。和前面相同,需求持续运转git rebase --continue
,直到悉数提交都完结。最终结果如图。
假如分支现已push到长途
不建议再运用rebase
了, 由于现已push
到了长途,你不知道别人有没有同步到本地, 假如别人现已同步到了本地,你再去修正,就很简单出问题。
这种状况下,运用全能办法,提交一个新commit,把前面的过错都修正好,并在commit信息中阐明详细状况。。。
总结
本课首要提到两个指令
-
git commit -amend
。这个是修正最终一次提交的指令。 -
git rebase -i HEAD~x
。rebase
是变基操作,便是重新提交HEAD~x
后面的所有提交,经过这种办法来修正前史提交内。
敞开成长之旅!这是我参加「日新方案 2 月更文应战」的第 12 天,点击检查活动详情