Git -- 修改commit信息

1,549 阅读2分钟

修改commit信息

场景:刚提交了一个代码,发现有几个字写错了,怎么办,当场再写一个修复这几个错别字的 commit?或者是commit信息写错了?

git commit --amend

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

git add . (若有新修改)
git commit --amend

然后我们会看到提交信息编辑界面:

image

之后,insert 进入编辑状态,编辑 commit 信息后退出即可。通过 git log 可以验证查看。

需要注意的是:commit --amend 并不是直接修改原 commit 的内容,而是生成了一条新的 commit。


commit --amend 可以修复最新 commit 的错误,但如果是倒数第二个 commit 写错了,怎么办?

rebase -i

rebase -i 是 rebase --interactive 的缩写形式,意为"交互式 rebase"--让用户编辑完成合并操作 (其实 git rebase -i 的完整命令为:git rebase -i [startpoint] [endpoint],如果不指定[endpoint],则该区间的终点默认是当前分支HEAD所指向的commit。<有关rebase的详细操作--待写>,rebase的作用简要概括为:可以对某一段线性提交历史进行编辑、删除、复制、粘贴) 。

如下图,当我提交commit信息“g”之后发现上一次提交信息应该为“f”,但我写成了“ff”:

image

这时候我们就可以使用 git rebase -i 命令了。

git rebase -i HEAD~2

执行后跳到一个新界面:

image

由远及近列出了两个commit,前面pick代表的默认使用该提交commit,按i进入编辑模式,修改该字段值,经常使用的如下:

  1. pick:简写p,启用该commit;
  2. reword:简写r,使用该commit,但是修改提交信息,修改后可以继续编辑后面的提交信息;
  3. edit:简写e,使用commit,对其进行修改;
  4. squash:简写s,使用该commit,并将该commit并入前一commit;
  5. drop:简写d,移除该commit;

这里把第一个pick改为edit:

image

然后退出(按esc键退出编辑模式,然后输入:wq,保存当前编辑)

image

下面的步骤同上面的commit --amend,执行:

git commit --amend

修改完成之后,执行 rebase --continue (git也已经给了提示)来继续 rebase 过程,把后面的 commit 直接应用上去:

git rebase --continue

最后我们可以 git log 查看验证一下


参考链接:
Git提交历史的修改删除合并
Git 实战手册
Git 原理详解及实用指南