Git 修改提交记录

1,119 阅读4分钟

在开发过程中,经常会遇到需要修改 commit message 的情况,对此 git 主要有两种方式来实现

修改未推送到远端仓库的 commit message

git commit --amend

输入命令后,会进入编辑界面后,可以修改最近一次的 commmit message。

合并或修改历史提交

git rebase -i HEAD~3

该命令表示修改最近 3 个提交记录。如果要从某一次提交后修改,也可以用

git rebase -i [commitid]

其中,修改不包含 [commitid]这个版本的提交。

例子

本地提交记录如下:

fa8061f (HEAD -> dev) add fifth
36ac4cb add fourth
2db8cc5 add third
7039fb2 add second
9e9ad9d add first

需求:

  • 将 second、third 与 fourth,三次提交合并,并将 commit message 修改为 “2~4”
  • 将 commitid=fa8061f 的提交消息改为 “5”

解决步骤:

  1. 定位要修改的 commitid:git rebase -i 9e9ad9d
  2. 编辑要修改的提交
pick 7039fb2 add second
pick 2db8cc5 add third
pick 36ac4cb add fourth
pick e988965 add five

# 变基 9e9ad9d..e988965 到 9e9ad9d(4 个提交)
#
# 命令:
# p, pick <提交> = 使用提交
# r, reword <提交> = 使用提交,但编辑提交说明
# e, edit <提交> = 使用提交,但停止以便在 shell 中修补提交
# s, squash <提交> = 使用提交,但挤压到前一个提交
# f, fixup [-C | -c] <提交> = 类似于 "squash",但只保留前一个提交
#                    的提交说明,除非使用了 -C 参数,此情况下则只
#                    保留本提交说明。使用 -c 和 -C 类似,但会打开
#                    编辑器修改提交说明
# x, exec <命令> = 使用 shell 运行命令(此行剩余部分)
# b, break = 在此处停止(使用 'git rebase --continue' 继续变基)
# d, drop <提交> = 删除提交
# l, label <label> = 为当前 HEAD 打上标记
# t, reset <label> = 重置 HEAD 到该标记
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# .       创建一个合并提交,并使用原始的合并提交说明(如果没有指定
# .       原始提交,使用注释部分的 oneline 作为提交说明)。使用
# .       -c <提交> 可以编辑提交说明。
#
# 可以对这些行重新排序,将从上至下执行。
#
# 如果您在这里删除一行,对应的提交将会丢失。
#
# 然而,如果您删除全部内容,变基操作将会终止。
#

根据提示,将 commit 修改如下

pick 7039fb2 add second
f 2db8cc5 add third
f -c 36ac4cb add fourth
r fa8061f add fifth

以上命令,有两处需要重新修改提交消息,所以会依次出现两个编辑界面。

  1. 依次修改提交信息,如果不涉及修改,则此步骤可省略

合并 7039fb22db8cc536ac4cb 三次提交,并将提交消息修改为 2~4

# 这是一个 3 个提交的组合。
# 第一个提交说明将被跳过:

# add second

# 提交说明 #2 将被跳过:

# add third

# 这是提交说明 #3:

2~4

# 请为您的变更输入提交说明。以 '#' 开始的行将被忽略,而一个空的提交
# 说明将会终止提交。
#
# 日期:  Tue Aug 23 17:41:04 2022 +0800
#
# 交互式变基操作正在进行中;至 9e9ad9d
# 最后完成的命令(3 条命令被执行):
#    fixup 2db8cc5 add third
#    fixup -c 36ac4cbe38269bed3c27a6027bb08a585c92dfb8 add fourth
# 接下来要执行的命令(剩余 1 条命令):
#    reword fa8061f add fifth
# 您在执行将分支 'dev' 变基到 '9e9ad9d' 的操作。
#
# 要提交的变更:
#       修改:     README.md
#

fa8061f 的提交消息,修改为 5

5

# 请为您的变更输入提交说明。以 '#' 开始的行将被忽略,而一个空的提交
# 说明将会终止提交。
#
# 日期:  Tue Aug 23 17:46:27 2022 +0800
#
# 交互式变基操作正在进行中;至 9e9ad9d
# 最后完成的命令(4 条命令被执行):
#    fixup -c 36ac4cbe38269bed3c27a6027bb08a585c92dfb8 add fourth
#    reword fa8061f add fifth
# 未剩下任何命令。
# 您在执行将分支 'dev' 变基到 '9e9ad9d' 的操作时编辑提交。
#
# 要提交的变更:
#       修改:     README.md
#
  1. 强推到远端仓库

这种方式是通过创建一个新提交替换了旧提交,所以如果修改失败,还是通过旧的 commitid 进行回滚