Git 修改远程历史提交信息

24 年 10 月 24 日 星期四
886 字
5 分钟

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

前言

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

预修改确认

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

复制历史提交 ID

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

sh
git rebase -i cd1475d

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

历史提交预处理

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

确认预修改

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

修改状态

依次修改提交历史

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

sh
git commit --amend
进入修改提交历史

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

修改提交历史

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

完成修改提交历史

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

sh
git rebase --continue
进入下一个提交历史

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

结束修改列表

推送所有修改

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

sh
git push -f
推送整理后的历史提交到远程分支

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

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

结语

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

文章标题:Git 修改远程历史提交信息

文章作者:rowink

文章链接:https://exi.ink/posts/git-%E4%BF%AE%E6%94%B9%E8%BF%9C%E7%A8%8B%E5%8E%86%E5%8F%B2%E6%8F%90%E4%BA%A4%E4%BF%A1%E6%81%AF

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。