git在不影响原提交时间的情况下修改提交顺序
问题描述
在使用 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
强制推送到远程仓库。