如何在mercurial中撤消提交的元数据更改?

时间:2015-10-23 10:59:59

标签: mercurial backout

我最近将开发分支中的变更集移植到默认分支中。之后,我的更改根据需要默认进行。

但出乎意料的是,有很多元数据级变更集更改了。详细说明,

  • 默认情况下,仅在我的开发分支中而不在默认分支中存在的几个文件被标记为已删除。
  • 某些文件中仅存在于我的开发分支而非默认分支中的多个额外行在默认情况下标记为已删除。

Mercurial已将默认情况下不存在的某些文件和行标记为默认分支中的已删除文件和行。

由于这个原因,当我尝试再次使用默认值合并时,mercurial标记这些文件和行从默认值中删除,并尝试从我的分支中删除它们。

我尝试退出以单独恢复有问题的提交。不幸的是,退出只会更改签入期间修改的源代码行,但不会删除删除不可用文件和行的元数据标记。

是否有撤消不合需要的提交元数据级别更改?任何帮助非常感谢。

感谢。

1 个答案:

答案 0 :(得分:0)

如果你有一个错误的提交,只是想忘记它曾经发生过,并且该提交没有后代,你可以let window = (window AXUIElement) AXUIElementSetAttributeValue(window, NSAccessibilityMainAttribute, true) 完全从历史中删除它(需要{ {3}})。

如果提交确实有后代,您可以使用hg strip(需要strip extension)来删除您不想保留的更改集。

这两种解决方案都涉及编辑历史记录,如果您公开分发了错误的提交,这会带来风险。您将不得不与可能已经提取错误提交或其任何后代的每个人进行协调,这是不可能的(例如在开源环境中)。您还需要在服务器端重做这些更改,因为Mercurial的hg histedit与Git的push --force不同。

如果您不想编辑历史记录,可以将错误提交的后代移植到最后一个已知的好祖先(例如push --force),然后在坏头上执行hg up good_ancestor; hg graft 'bad_commit:: - bad_commit' (S)。确保在close-branch提交上留下信息提交消息,以便其他开发人员知道在哪里重新定义从错误提交中下降的任何内容。