Git 如何修改历史 Commit message

535 阅读2分钟

修改最近一条Commit

如果只是想修最近一条 Commit, 直接使用命令

 git commit --amend 

就可以进行修改,命令行会进入vim的界面,让你修改上一次的提交 Message,改好消息,退出即可。这里还涉及到了 vim 的基本操作,好像有些人也不熟悉,本文会做最基本的讲解。

按字母 O 键进入编辑状态,开始修改内容。

按 Esc 键退出编辑状态,可以输入各种命令,最常用的是输入“:q”直接退出,输入“:wq”进行保存并退出。

修改过去若干条 Commit

如果要修改过去若干条 Commit 的 Message,不管改不改最新那一条,都会稍微有点麻烦,下面讲解一下。

首先看看我准备的例子是怎么样的,先执行

git log

可以看到我准备的例子里有 4 个Commit,分别叫提交 1、2、3、4。

几个提交都很相似,唯独“提交2”搞特殊,写错了,后面不是ABCD,而是XXXX。

我们想把 4 个 Commit 都做成 “提交n:ABCD”的形式,一家人整整齐齐。

由于后面已经叠了两个Commit,前面说的 amend 方法已经没有用了。

应该用 rebase -i ,后面跟上“提交2”之前的一个提交的ID。所以我们要输入“提交1”的ID,这样后面的提交2、3、4我们都可以修改了。

 git rebase -i 8876a66df1ea4a7e911c271b2bd3292ddfa1eca0

于是我们又进入了Vim界面, 可以在顶部看到提交2,3,4都可修改。

这里有几种修改选择:

  • pick:保留该 commit
  • reword:保留该 commit,但我需要修改该commit的 Message
  • edit:保留该 commit, 但我要停下来修改该提交(包括修改文件)
  • squash:将该 commit 和前一个 commit 合并
  • fixup:将该 commit 和前一个 commit 合并,但我不要保留该提交的注释信息
  • exec:执行 shell 命令
  • drop:丢弃这个 commit

按照实际需要去选择命令,我们这里需要的是 reword,用来修改 Message。

把 “提交2”前面的 pick 改成 reword。还是前面说的方式, O 键进入修改。

给过去的提交选择操作命令

修改完之后,按 Esc 退出编辑,输入":wq" 保存并退出,之后就会进入“提交2”的编辑界面。

编辑“提交2”的信息

“提交2:XXXX”改成 “提交2:ABCD”

修改完之后还是按 Esc 退出编辑,输入":wq" 保存并退出。

之后就会显示 Successfully rebased and updated refs/heads/master,就是修改成功了。

再次执行

git log

看看我们的成果,可以看到现在4个提交都是整整齐齐的,结尾都是 ABCD 了。

历史提交都修复好了,最后我们就可以 push 到远程仓库啦!

 $  git push origin (branch 名称) -f