Loading

git 修改 Commit Message

修改 Commit Message

本文源自极客时间 《go 语言项目开发实战 孔令飞》

本文是 rebase 命令的一个使用场景,关于rebase命令,可以参考这篇:git rebase 命令介绍

即使我们有了 Commit Message 规范,但仍然可能会遇到提交的 Commit Message 不符合规范的情况,这个时候就需要我们能够修改之前某次 commit 的 Commit Message。

具体来说,我们有两种修改方法,分别对应两种不同情况:

  1. git commit --amend:修改最近一次 commit 的 message;
  2. git rebase -i:修改某次 commit 的 message。

接下来,我们分别来说这两种方法。

git commit --amend:修改最近一次 commit 的 message

有时候,我们刚提交完一个 commit,但是发现 commit 的描述不符合规范或者需要纠正,这时候,我们可以通过 git commit --amend 命令来修改刚刚提交 commit 的 Commit Message。具体修改步骤如下:

1.查看当前分支的日志记录。

$ git log –oneline
418bd4 docs(docs): append test line 'update$i' to README.md
89651d4 docs(doc): add README.md

可以看到,最近一次的 Commit Message 是 docs(docs): append test line 'update$i' to README.md,其中 update$i 正常应该是 update1。

2.更新最近一次提交的 Commit Message

在当前 Git 仓库下执行命令:git commit --amend,后会进入一个交互界面,在交互界面中,修改最近一次的 Commit Message,如下图所示:
image

修改完成后执行:wq 保存,退出编辑器之后,会在命令行显示,该 commit 的 message 的更新结果如下:

[master 55892fa] docs(docs): append test line 'update1' to README.md
 Date: Fri Sep 18 13:40:42 2020 +0800
 1 file changed, 1 insertion(+)

3.查看最近一次的 Commit Message 是否被更新

$ git log --oneline
55892fa docs(docs): append test line 'update1' to README.md
89651d4 docs(doc): add README.md

可以看到最近一次 commit 的 message 成功被修改为期望的内容。

git rebase -i:修改某次 commit 的 message

如果我们想修改的 Commit Message 不是最近一次的 Commit Message,可以通过 git rebase -i <父 commit ID>命令来修改。这个命令在实际开发中使用频率比较高,我们一定要掌握。具体来说,使用它主要分为 4 步。

1.查看当前分支的日志记录。

$ git log --oneline
1d6289f docs(docs): append test line 'update3' to README.md
a38f808 docs(docs): append test line 'update$i' to README.md
55892fa docs(docs): append test line 'update1' to README.md
89651d4 docs(doc): add README.md

可以看到倒数第 3 次提交的 Commit Message 是:docs(docs): append test line 'update$i' to README.md,其中 update$i 正常应该是 update2。

2.修改倒数第 3 次提交 commit 的 message。

在 Git 仓库下直接执行命令 git rebase -i 55892fa,然后会进入一个交互界面。在交互界面中,修改最近一次的 Commit Message。这里我们使用 reword 或者 r,保留倒数第 3 次的变更信息,但是修改其 message,如下图所示:
image

修改完成后执行:wq 保存,还会跳转到一个新的交互页面,如下图所示:
image

修改完成后执行:wq 保存,退出编辑器之后,会在命令行显示该 commit 的 message 的更新结果:

[detached HEAD 5a26aa2] docs(docs): append test line 'update2' to README.md
 Date: Fri Sep 18 13:45:54 2020 +0800
 1 file changed, 1 insertion(+)
Successfully rebased and updated refs/heads/master.

Successfully rebased and updated refs/heads/master.说明 rebase 成功,其实这里完成了两个步骤:更新 message,更新该 commit 的 HEAD 指针。

注意:这里一定要传入想要变更 Commit Message 的父 commit ID:git rebase -i <父 commit ID>。

3.查看倒数第 3 次 commit 的 message 是否被更新。

$ git log --oneline
7157e9e docs(docs): append test line 'update3' to README.md
5a26aa2 docs(docs): append test line 'update2' to README.md
55892fa docs(docs): append test line 'update1' to README.md
89651d4 docs(doc): add README.md

可以看到,倒数第 3 次 commit 的 message 成功被修改为期望的内容。

这里有两点需要你注意:

  • Commit Message 是 commit 数据结构中的一个属性,如果 Commit Message 有变更,则 commit ID 一定会变,git commit --amend 只会变更最近一次的 commit ID,但是 git rebase -i 会变更父 commit ID 之后所有提交的 commit ID。
  • 如果当前分支有未 commit 的代码,需要先执行 git stash 将工作状态进行暂存,当修改完成后再执行 git stash pop 恢复之前的工作状态。
posted @ 2021-10-11 18:59  拾月凄辰  阅读(8663)  评论(0编辑  收藏  举报