Git交互式变基(fixup),保留合并提交的原始日期/时间戳。

3

我希望通过使用 git rebase 命令和 'fixup' 选项将类似的 commit 合并为一个,以清理 github 上托管的 git repo。
我的 repo 已经有三年的历史了,所以我觉得可以分步骤执行。
例如,我的最近 5 个 commit 都是正常的,但第 6 至 10 个 commit 需要合并为一个。因此,我执行以下操作:

git rebase -i @~10

这些提交以相反的顺序列出,第10个提交是我要挑选的。
接下来的4个提交都是“修正”类型。
剩余的5个提交设置为“挑选”类型。

完成后,我运行:

git push origin +master

问题是,虽然提交已经合并,但在 GitHub 的代码视图中显示的日期是今天。 我想简单地将它们合并并保留原始提交的日期/时间戳。 这可能吗?
1个回答

4

如果使用git rebase时遇到问题,一种可能的解决方法是使用--committer-date-is-author-date选项...但这与交互式rebase不兼容。

因此,您可以尝试:

  • do your interactive rebase,
  • then, once the rebase is done, make a git filter-branch to restore the commit dates:

    git filter-branch --env-filter 'GIT_COMMITTER_DATE=$GIT_AUTHOR_DATE; export GIT_COMMITTER_DATE'
    

谢谢您的建议。我需要阅读一下您提出的filter-branch。也许我们可以退一步:是否有更简单的方法来实现我的目标,即浏览我的提交历史并将较小的提交合并为一个保留原始日期/时间戳的提交? - Richard Dragon
@RichardDragon 不完全是这样:你可以先进行交互式变基,然后再使用“--committer-date-is-author-date”选项对最新提交(未合并的提交)进行第二次变基。 - VonC
很好,您的建议对我有效,谢谢! - Richard Dragon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接