我的用例非常简单:我想从“今天的工作”分支中压缩所有需要回归主分支的提交。
到目前为止,我一直在使用 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
我希望合并后生成的提交日期为合并时间,即现在,而不是提交时间。
据我所知,您只能将提交压缩到先前的提交中,而不能向上合并到一个新提交中,但是否有某种方法可以实现此操作?
正确的解决方案似乎是:
- 创建一个新的提交,包含合并消息和正确的提交日期时间,
- ??? <--- 将以前的提交压缩到此提交中。
我该怎么做?