问题描述

在使用 git 进行版本控制时,有时候为了让提交记录更加清晰,我们需要调整提交的顺序。如果直接使用git rebase -i命令进行交互式 rebase,完成 rebase 并提交到 github 后,会导致受影响的提交记录的提交时间被修改,这是因为 git rebase 实际上是创建了新的提交对象,而不是简单地重新排列现有的提交。因此,每次 rebase 都会产生新的提交 ID,并将当前时间作为提交时间。

解决方案

如果希望在修改提交顺序的同时保留原始提交时间,可以使用rebase --committer-date-is-author-date选项。

完整步骤

修改提交顺序的完整步骤如下:

1. 确保工作目录干净

确保工作目录没有未提交的更改,可以使用 git status 来检查。

2. 执行 rebase

git rebase -i --committer-date-is-author-date <commit-id>

其中<commit-id>是需要调整的提交记录的前一个提交记录的 ID。 或者也可以使用HEAD~n来指定最近的 n 个提交记录。

git rebase -i --committer-date-is-author-date HEAD~n

3. 编辑 rebase 列表

执行上述命令后,会打开一个编辑器,列出了需要 rebase 的提交记录。在编辑器中,可以调整提交记录的顺序,删除不需要的提交记录,或者修改提交记录的操作方式。

比如:

pick ca61b2e Create test.md
pick b2d85fd Update test.md
pick fda1c25 Create test1.md

可以用 vim 的快捷键快速调整提交记录的顺序,先按dd删除一行,然后按p粘贴到需要的位置。

4. 保存并退出编辑器

保存并退出编辑器后,git 会自动执行 rebase 操作。如果有冲突需要解决,按照提示解决冲突后,使用git rebase --continue继续 rebase。

5. 推送到远程仓库

完成 rebase 后,使用git push -f强制推送到远程仓库。