【问题标题】:git squash and preserve last commit's timestampgit squash 并保留最后一次提交的时间戳
【发布时间】:2016-12-08 23:00:23
【问题描述】:

考虑我有提交

... -- A -- B -- C

如果我使用git rebase -i 将所有三个提交压缩为一个,我们可以

pick A
squash B
squash C

我看到结果提交 A 具有其原始时间戳。如何让它继承提交C(最后一个)的时间戳?

我能想到的是git commit --amend --date=<new_time>,但是这种方式需要在squash或者reflog之前记住commit C的时间戳。

我发现最新提交的时间戳更合理,因为它显示了我实际完成提交中的工作的时间。

谢谢。

【问题讨论】:

    标签: git


    【解决方案1】:

    没有简单的方法可以做到这一点,但有一些选择。这是一个:

    git commit --amend --date="$(git show -s --pretty=tformat:%ai <sha1-of-C>)"
    

    还有一个:

    git commit --amend -c <sha1-of-C>
    

    后者会破坏你现有的提交消息,所以你必须重写它。

    【讨论】:

    • @CrendKing:在这种情况下,formattformat 无关紧要,因为 tformat 换行符已被 shell 的命令替换规则剥离。但是,99% 的时间我想要最后的换行符(或任何终止符),因为我通常使用脚本解析自定义日志输出。为了确保我习惯性地在重要的时候输入tformat,即使不重要,我也会使用tformat
    【解决方案2】:

    git commit --amend --reset-author

    【讨论】:

    • 这不使用C中的时间戳,它使用当前时间作为时间戳。
    • 这并不完全符合 OP 的要求,但(至少在我看来)更接近通常想要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    • 2012-08-31
    • 2020-12-11
    • 2015-04-20
    • 2016-12-25
    相关资源
    最近更新 更多