Mercurial:修改以前的提交日期

时间:2017-07-21 13:27:49

标签: mercurial

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

我可以使用hg ci --amend -d xxx更改上次提交的提交日期,但不能为之前的提交更改。

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

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

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

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

2 个答案:

答案 0 :(得分: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 :(得分:-1)

对于使用TortoiseHG的用户(不知道evolve扩展名,即使知道,也有一种更简单的方法),

使用mq扩展名。

  1. 确保您的工作目录是干净的,(提示:使用shelve扩展名)
  2. 将所有变更集导入要更改的MQ中,
  3. 双击要更改的任何变更集,使其成为应用最广泛的变更集,
  4. 使用 QRefresh 按钮左侧的 Options 按钮设置新的日期/时间,
  5. 点击 QRefresh
  6. 从3开始重复。
  7. 别忘了在选项对话框中取消选中日期更改,以免发生不好的事情。