如何更改我在本地存储库中提交的时间?
假设我已经完成了几次提交,并注意到我的计算机上的日期是错误的.假设这些提交还没有推到任何地方.
您可以使用MQ(Mercurial Queues)轻松完成:
设置一个糟糕的日期回购
+ hg init + echo line + hg commit -A -d 12/1 -m first adding file + echo line + hg commit -A -d 12/2 -m second + echo line + hg commit -A -d 12/3 -m third + hg log changeset: 2:81c88de729a8 tag: tip user: Ry4an Brasedate: Thu Dec 03 00:00:00 2009 -0600 summary: third changeset: 1:c1fe70008824 user: Ry4an Brase date: Wed Dec 02 00:00:00 2009 -0600 summary: second changeset: 0:abb97adaa541 user: Ry4an Brase date: Tue Dec 01 00:00:00 2009 -0600 summary: first
将更改集转换为队列中的修补程序
+ hg qimport -r 2 + hg qimport -r 1 + hg qimport -r 0
依次将每个补丁设为qtip并修复日期
+ hg qrefresh -D + hg qpop Now at: 1.diff + hg qrefresh -D + hg qpop Now at: 0.diff + hg qrefresh -D
重新应用补丁
+ hg qpush applying 1.diff Now at: 1.diff + hg qpush applying 2.diff Now at: 2.diff
将每个补丁变回真正的变更集
+ hg qdel -r 0 + hg qdel -r 1 + hg qdel -r 2
更好:
+ hg log changeset: 2:6b51e14aadfc tag: tip user: Ry4an Brasedate: Wed Feb 25 22:29:01 2009 -0600 summary: third changeset: 1:5cbb9fc51bcc user: Ry4an Brase date: Wed Feb 25 22:29:02 2009 -0600 summary: second changeset: 0:ec58d1f24278 user: Ry4an Brase date: Wed Feb 25 22:29:02 2009 -0600 summary: first
如果它只是一个单一的承诺,那承诺是最近的一次(在你在任何分支),一个快速班轮这样做是:
hg commit --amend -d now
有--date
标志hg commit
,这是你如何覆盖提交时间.问题是如何在没有工具痛苦的情况下重新提交早期更改.
假设您获得以下本地提交历史记录:
dir1> hg commit # r100, OK dir1> hg commit # r101, need to fix time dir1> hg commit # r102, need to fix time
这是我的解决方案:
hg diff -r100:101 > 101.diff hg diff -r101:102 > 102.diff cd .. hg clone -r100 dir1 dir2 # create a copy just before changesets than needs to be fixed cd dir2 patch -i ../dir1/101.diff hg commit -m "Same commit message" --date="required date" patch -i ../dir1/102.diff hg commit -m "Same commit message" --date="required date" cd .. rm -rf dir1 && mv dir2 dir1 # replace working copy
您可以自动应用hg patch
我尚未在练习中使用的补丁.