2

我在一个分支“开发”中工作,当准备好与 master 合并时,使用交互式 rebase 将我所有的小提交压缩到一个包含功能的提交中,然后将其应用在 master 之上。

效果很好,我唯一的问题是标记提交的时间是第一个小提交。这是有道理的,因为这是唯一被“挑选”的提交,其余的被“压扁”。任何人都知道如何将集中提交标记为最后一个小提交的时间而不是第一个?可以通过“编辑”最早的提交并将后来的提交压缩到这个提交中来做到这一点(我大概可以编辑时间属性)但是有更好的方法吗?

4

2 回答 2

5

如果您不能只重新排列提交以选择具有所需日期的提交(例如,因为最后一次提交不会干净地应用在第一次提交的父级之上),那么您可以尝试以下方法。

如果您已将您的开发提交压缩到develop上的单个提交中,那么您可以使用git show开发的 reflog来提取原始最终提交的日期(压缩之前),然后使用 修改新提交的日期git commit --date=

git commit --amend -C HEAD --date="$(git show --pretty=format:%ad develop@{1})"

这会修改 ( --amend) HEAD 提交,以便

  • 它具有来自 HEAD 的提交消息和日期,
    ( -C HEAD; 使用它可以避免为提交消息启动一个编辑器,只是为了立即退出它而不进行任何更改;如果您确实想要编辑提交消息以及更改日期)
  • 它的日期是
    ( --date=)
    • 与最近开发
      的先前提示相同的日期 ("$(git show --pretty=format:%ad develop@{1})")。

如果develop@{1}没有您想要的日期,那么您可以使用git log -g develop查找具有您想要的日期的提交。

于 2010-10-19T19:29:55.733 回答
4

重新排序提交,以便具有您要保留的时间戳的提交是被pick编辑的提交,然后是squash其他所有内容。

于 2010-10-19T18:58:51.483 回答