因此,我有一个非常简单的用例;我想压缩所有需要从我的“今日工作”分支重新回到master的提交。

到现在为止,我一直在使用git rebase -i,但是效果并不理想。最后一次提交的时间戳不正确。

这是执行此操作的示例:

[work1] git checkout master
Switched to branch 'master'

[work1] git rebase today
First, rewinding head to replay your work on top of it...
Fast-forwarded master to today.

[work1] git log --pretty=format:"%h%x09%an%x09%ad%x09%s"
5ad95ff Doug    Wed Nov 7 10:12:42 2012 +0800   Updated TODO again
abb891c Doug    Wed Nov 7 10:12:24 2012 +0800   Added more work
c5fd35c Doug    Wed Nov 7 10:11:50 2012 +0800   Added more work
a98facd Doug    Wed Nov 7 10:11:22 2012 +0800   Add work
b4465be Doug    Tue Nov 6 21:38:53 2012 -0800   Updated TODO
403cea9 Doug    Fri Jan 2 21:38:53 2009 -0800   Added todo

对,现在我想将最后的四个提交压缩为一个提交。
[work2] date
Wed  7 Nov 2012 10:39:39 WST

[work2] git rebase -i b4465be

pick a98facd Add work
squash c5fd35c Added more work
squash abb891c Added more work
squash 5ad95ff Updated TODO to reflect todays work

结果:
[work2] git log
commit 3f7f1d2eb4ef23c73dce95f718152c7d5683a926
Author: Doug <doug@null.com>
Date:   Wed Nov 7 10:11:22 2012 +0800

    Add work
    Added more work
    Added more work
    Updated TODO to reflect todays work

commit b4465bee5b278214704edcfef3f6e222b5b52964
Author: Doug <doug@null.com>
Date:   Tue Nov 6 21:38:53 2012 -0800

    Updated TODO

没有!那不是我想要的产生的提交的时间戳是我们压缩到的提交的时间戳;我想要的是新提交日期为当前时间。

只是为了确切说明我在说什么:
[work2] date
Wed  7 Nov 2012 10:39:39 WST

Author: Doug <doug@null.com>
Date:   Wed Nov 7 10:11:22 2012 +0800

我希望结果提交是合并时间之前的日期,即。现在,而不是提交时间。

据我所知,您只能压缩到以前的提交,而不能向上压缩到新的提交,但是有什么办法可以做到这一点?

正确的解决方案似乎是
  • 使用合并消息和正确的提交日期时间
  • 创建一个新的提交
  • ???
    我怎么做?

    最佳答案

    哈克:您可以使用

    git commit --amend --reset-author
    

    git commit手册页说,这“还更新了作者时间戳”。您无需对提交进行任何更改(我在本地尝试过),它将把时间戳更新为当前时间。绝对是一种滥用,但这似乎奏效。

  • 10-07 19:17
    查看更多