Mercurial:修改之前提交的日期

4
有没有一种方法可以更改多个草稿变更集的提交日期?特别是最后一个之前的变更集。
我可以使用 `hg ci --amend -d xxx` 更改最后一次提交的提交日期,但无法更改早期的提交。
显然,这是非常困难的,因为变更集日期是变更集哈希的输入之一(顺便问一下,这在哪里有权威的文档记录?),因此在此处进行更改将更改所有变更集后代的哈希。 但是,由于这些是草稿变更集,所以这样做没问题。
似乎无法使用 `histedit` 进行此操作。
我猜测 `rebase` 可能能够做到这种事情,但相关的帮助文本没有给出任何指针,这表明它至少是不常见的。
(我正在尝试解决的问题是某些代码正在一台 deliberately 没有网络连接且经常重新启动的计算机上进行编辑和提交;这意味着它对系统时间的概念可能是错误的,并且有时非常错误-例如1970年!-除非有人记得手动设置系统日期为合理值。虽然这对提交图的拓扑结构并不重要,但至少对于每个人来说,如果日期与现实有关系,那将是很好的。因此,我希望在“推送之前审核”步骤中修复这个问题。)
2个回答

2

好的,有一种方法是您已经基本列出的,但它需要激活evolve扩展:设置一个提交的日期,然后重新应用所有后续的提交,并重复此过程,直到为每个提交设置日期。假设历史是线性的:

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

重复这个过程,每一步增加一个changesetID。如果你的历史不是线性的,你需要注意你rebase的修订版本和你更新的修订版本。

第二种选择,但并不好,是使用进化扩展中的进化命令。它可以帮助你完成这个过程,使上述步骤稍微容易一些:

但你仍然需要从你想要刷新的那些提交中开始:

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

然后,通过逐步增加changesetID的方式重复此过程,直到每个提交具有您想要的日期。

(如果有一种使用evolve为所有演变的提交设置/刷新提交日期的方法,我很乐意学习-否则这绝对是一个功能请求)


谢谢 - 这个方法可行。_然而_,hg commit --amend 只有在安装了 evolve 扩展的情况下才能使用。如果没有安装 evolve 扩展,hg 将拒绝修改具有子项的 changesets;因此,实际上这两种解决方案都需要 evolve 扩展,而不仅仅是第二种解决方案。我一直在等待使用该扩展,但听起来足够稳定,可以进行尝试性使用。但是要小心... - Norman Gray
是的,你说得对...如果没有进化,你就不能修改带有子提交的提交。我会更正我的答案。 - planetmaker

-1

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

使用mq扩展。

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

请查看请停止使用MQ - Dave C
我不会这么做。我读了那篇文章的一部分,他说的话完全是胡扯八扯。他批评某些mq命令没有做他想要的事情...可那些命令甚至不是为了做那个设计的。他写的一半对我来说是希腊文,另外一些部分(比如Shelf部分)则是完全错误的。 - Mark Jeronimus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接