+ 编程

Git 修改历史提交信息
2024-10-24

目录:

在项目维护的过程中,面对同类型功能的更新,最新时间线上的提交描述与历史记录中的描述存在细微差异。为了确保代码历史记录便于回溯和审查,我们就要将这些描述进行统一。好在,Git 提供了修改历史提交的方式,这使我们能够更好的维护出一个更优雅的提交历史。

前言

git rebase 是 Git 提供的命令之一,它不会创建新的提交,而是会修改现有的提交。通常用来修复提交消息、合并多个提交或者修复错误。

预修改确认

首先,我们找到需要退回的提交历史,然后复制其提交 ID,该值是通过 SHA-1 哈希算法生成的 40 位的十六进制字符

复制历史提交 ID

然后我们在终端中执行 git rebase -i 命令,将提交历史位置定位到该提交前。

git rebase -i cd1475d

当执行完成后,我们就进入了 rebase(变基)操作,此时终端会倒序显示目标提交到最新提交的所有提交历史。这时,如果我们直接更改提交信息是没有效果的,这个步骤主要为了确定那些提交历史需要更改。

历史提交预处理

我们点击i,进入 vi/vim 编辑模式,找到所有需要更改的记录,把提交历史前面的 pick 更改为 edit。最后点击 Esc,切换到命令模式,输入 :wq 回车执行保存修改。

确认预修改

此时,终端提示以下信息,这代表 Git 进入了修改状态。在这个过程中,如果没有退出,也无法执行提交新的 commit。

完成预修改

依次修改提交历史

然后我们执行 git commit --amend 对当前提交历史的信息进行修改

git commit --amend

此时我们就进入了目标历史提交信息的修改界面,我们点击i键进入修改模式。当我们修改完成时,点击 Esc,切换到命令模式,输入 :wq 回车保存修改。

修改提交历史

当执行完成时,会显示更改了一条提交历史,这说明当前提交历史已经修改完成了

完成修改提交历史

然后,我们需要通过执行 git rebase --continue 命令,进入到下一个提交历史

进入下一个提交历史

根据上面的操作,反复修改和执行命令,当终端显示没有更多的提交历史时,我们就完成了所有指定所有修改

结束修改列表

推送所有修改

最后,由于更改了 Git 历史记录,所以通常的 git push 不会成功,这需要强制推送。我们需要通过 git push -f 推送本地历史记录到远程分支,将其覆盖。

推送整理后的历史提交到远程分支

如果在多人开发下,请慎用 git push -f,因为这可能会改变远程分支提交的历史顺序。

此时,Git 的历史提交信息就修改完成了。此外,如果在修改过程退出,可以使用 git rebase --absort直接中断结束修改,丢弃所有修改。

结语

因为修改过很多次远程分支的提交信息,所以我将这个过程记录下来,方便后续查阅。

本文作者: Exisi 本文链接: 版权声明:本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。