Mercurial:修改以前的提交日期

问题描述 投票:3回答:2

有没有办法更改多个草稿更改集的提交日期?特别是在最后一个之前的变更集。

我可以使用hg ci --amend -d xxx更改上次提交的提交日期,但不能对任何早期提交更改。

这显然是非平凡的,因为变更集日期是变更集哈希的输入之一(顺便说一下,这是权威记录的位置?),因此这里的更改将改变所有变更集的后代的哈希值。但是,由于这些是草案变更集,因此可以。

使用histedit似乎无法做到这一点。

我可以猜测rebase可能会做这种事情,但相关的帮助文本没有给出任何指示,这表明它至少是异国情调。

(我正在尝试解决的问题是某些代码正在一台机器上进行编辑和提交,故意不是网络连接而且经常重新启动;这意味着它的系统时间概念可能是错误的,并且有时非常错误 - 就像在1970年一样! - 除非有人记得手动将系统日期设置为合理的值。虽然这对提交图的拓扑结构无关紧要,但至少对每个人来说都是好的,如果日期与现实有一定的关系。因此,我希望在“推前审查”步骤中解决这个问题。)

mercurial
2个回答
1
投票

好吧,有一种方法你已基本完成了自己,但它需要激活evolve扩展:设置一次提交的日期,并重新设置所有后续的,并重复,直到你为每个提交设置日期。假设线性历史:

hg update -rOLDEST_UNCHANGED
hg commit --amend --date DATA
hg rebase -b(OLDEST_UNCHANGED+1) -dtip

冲洗并重复,每个步骤将changesetID增加1。如果您的历史记录不是线性的,则必须注意您重新定义的修订版本以及您更新的修订版本。

第二种选择,但不是更好,是利用evolve扩展中的evolve命令。这有助于您完成此过程,使上述步骤更容易:

您仍然必须从要刷新的第一个提交开始:

hg update --rev OLDEST_UNCHANGED
hg commit --amend --date DATE
hg evolve --all

并通过增加changesetID再次重复此过程,直到每次提交都有您想要的日期。

(如果有一些方法可以使用evolve为其发展的所有提交设置/刷新提交日期,我很乐意学习 - 否则它肯定是一个功能请求)


-1
投票

对于那些使用TortoiseHG(不知道evolve扩展,即使它确实如此,有一种更简单的方法),

使用mq扩展名。

  1. 确保你的工作目录是干净的,(protip:使用shelve扩展)
  2. 将所有变更集导入要更改的MQ,
  3. 双击要更改的任何变更集,使其成为应用程序最多的变更集,
  4. 使用QRefresh按钮左侧的选项按钮设置新的日期/时间,
  5. 点击刷新,
  6. 重复3。
  7. 不要忘记在选项对话框中取消选中日期更改,以免发生错误。
© www.soinside.com 2019 - 2024. All rights reserved.