11-提交的内容发现错误怎么办
2026/9/9 3:58:20 网站建设 项目流程

修复当前提交的错误

刚提交了一个代码,发现有几个字写错了:

怎么修复?

当场再写一个修复这几个错别字的commit?可以是可以,不过还有一个更加优雅和简单的解决方法:commit -—amend

"amend" 是「修正」的意思。在提交时,如果加上--amend参数,Git 不会在当前commit上增加commit,而是会把当前commit里的内容和暂存区(stageing area)里的内容合并起来后创建一个新的commit用这个新的commit把当前commit替换掉。所以commit --amend做的事就是它的字面意思:对最新一条commit进行修正。

具体地,对于上面这个错误,你就可以把文件中的错别字修改好之后,输入:

git add 笑声.txt git commit --amend

Git 会把你带到提交信息编辑界面。可以看到,提交信息默认是当前提交的提交信息。你可以修改或者保留它,然后保存退出。然后,你的最新commit就被更新了。

修复历史提交的错误

git commit --amend可以修复最新commit的错误,但如果是倒数第二个commit写错了,怎么办?如果不是最新的commit写错,就不能用gitcommit --amend来修复了,而是要用rebase。不过需要给rebase也加一个参数:-i

rebase -irebase --interactive的缩写形式,意为「交互式rebase」。

所谓「交互式rebase」,就是在rebase的操作执行之前,你可以指定要rebasecommit链中的每一个commit是否需要进一步修改。

那么你就可以利用这个特点,进行一次「原地rebase」。

例如你是在写错了commit之后,又提交了一次才发现之前写错了:

git log

1、开启交互式 rebase 过程

现在再用commit --amend已经晚了,但可以用rebase -i

git rebase -i HEAD^^

说明:在 Git 中,有两个「偏移符号」:^~

^的用法:在commit的后面加一个或多个^号,可以把commit往回偏移,偏移的数量是^的数量。例如:master^表示master指向的commit之前的那个commitHEAD^^表示HEAD所指向的commit往前数两个commit

~的用法:在commit的后面加上~号和一个数,可以把commit往回偏移,偏移的数量是~号后面的数。例如:HEAD~5表示HEAD指向的commit往前数 5 个commit

上面这行代码表示,把当前commitHEAD所指向的commitrebaseHEAD之前2个的commit上:

如果没有-i参数的话,这种「原地rebase」相当于空操作,会直接结束。而在加了-i后,就会跳到一个新的界面:

2、在编辑界面选择 commit 和对应的操作

这个编辑界面的最顶部,列出了将要「被rebase」的所有commits,也就是倒数第二个commit「增加常见笑声集合」和最新的commit「增加常见哭声集合」。需要注意,这个排列是正序的,旧的commit会排在上面,新的排在下面。

这两行指示了两个信息:

  1. 需要处理哪些commits;
  2. 怎么处理它们。

你需要修改这两行的内容来指定你需要的操作。每个commit默认的操作都是pick(从图中也可以看出),表示「直接应用这个commit」。所以如果你现在直接退出编辑界面,那么结果仍然是空操作。

但你的目标是修改倒数第二个commit,也就是上面的那个「增加常见笑声集合」,所以你需要把它的操作指令从pick改成editedit的意思是「应用这个commit,然后停下来等待继续修正」。其他的操作指令,在这个界面里都已经列举了出来(下面的 "Commands…" 部分文字),你可以自己研究一下。

pick修改成edit后,就可以退出编辑界面了:

上图的提示信息说明,rebase过程已经停在了第二个commit的位置,那么现在你就可以去修改你想修改的内容了。

3、修改写错的 commit

修改完成之后,和上节里的方法一样,用commit --amend来把修正应用到当前最新的commit

git add 笑声 git commit --amend

4、继续 rebase 过程

在修复完成之后,就可以用rebase --continue来继续rebase过程,把后面的commit直接应用上去。

git rebase --continue

然后,这次交互式rebase的过程就完美结束了,你的那个倒数第二个写错的commit就也被修正了:

实质上,交互式rebase并不是必须应用在「原地rebase」上来修改写错的commit,这只不过是它最常见的用法。你同样也可以把它用在分叉的commit上,不过这个你就可以自己去研究一下了。

小结

一、用gitcommit --amend可以修复当前提交的错误。

二、交互式rebase,它可以在rebase开始之前指定一些额外操作。交互式rebase最常用的场景是修改写错的commit,但也可以用作其他用途。它的大致用法:

  1. 使用方式是git rebase -i 目标commit
  2. 在编辑界面中指定需要操作的commits 以及操作类型;
  3. 操作完成之后用git rebase --continue来继续rebase过程。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询