Mercurial:修改以前的提交日期

Mercurial: amend previous commit dates

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

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

这显然很重要,因为变更集日期是变更集散列的输入之一(顺便说一下,这在何处有权威记录?),因此此处的更改将更改所有的散列变更集的后代。但是,由于这些是草稿变更集,所以没问题。

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

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

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

好吧,有一种方法您基本上已经自己列出来了,但是它需要激活 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 再次重复此过程,直到每次提交都有您想要的日期。

(如果有某种方法可以 set/refresh 对所有提交使用 evolve 的提交日期,我很高兴学习 - 否则它绝对是一个功能请求)

对于那些使用 TortoiseHG 的人(不知道 evolve 扩展,即使知道,也有更简单的方法),

使用 mq 扩展名。

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