【问题标题】:Restoring the useful changes lost by closing a branch恢复因关闭分支而丢失的有用更改
【发布时间】:2012-11-19 22:08:56
【问题描述】:

我对主(也是唯一的)分支进行了一些更改 (A)。然后我的同事做了一些其他的改变(B)。然后我发现更改(A)被彻底破坏了,我决定完全放弃它们。另一方面,变化 (B) 非常好,幸运的是完全独立于变化 (A)。变化 (B) 的数量远小于变化 (A)。

通常情况下,我会将hg commit --close-branch 设置为described here。但是后来我丢失了更改(B),并且需要在新的活动分支中重新创建它们。我可以做到这一点,只需(手动)识别受影响的文件,并(手动)更新它们,然后提交。这显然不是完美的,因为它需要两个手动步骤,并且还在存储库中创建了一个误导性的提交(误导性是因为这些更改是我的同事不久前做出的,但看起来好像是我今天做出的)。我想这不是世界末日,但有更优雅的解决方案吗?

注意:如果 Mercurial 支持将只是差异从一个提交应用到修订树中的另一个位置,它会起作用。但我怀疑此功能不存在,这是有充分理由的:当逐字应用于另一个父变更集时,差异与现有父变更集非常有用。

【问题讨论】:

  • “如果 Mercurial 支持仅将一个提交的差异应用到修订树中的另一个位置,它就会起作用。” – 确实如此,该命令称为graftrebase --keep 也做了类似的事情。

标签: version-control mercurial branch


【解决方案1】:
  1. --close-branch 有另一个理由,而不是丢弃错误的变更集
  2. 您可以通过提供“undoing-changeset”来撤消早期历史中出现的任何更改集,阅读hg help backout,通常是hg backout CSET-HASH 反向更改,在 CSET-HASH 中完成,费用为在 repo 中额外提交

使用回退实现杀死旧变更集的示例(rev. 7 undo rev.3)

>hg log -r 3:7 --template "{rev}:{node|short}\n{desc}\n\n"
3:2f09429039a6
Немного более русские даты

4:97419f57d7db
Заготовки под перевод

5:674a76db96fd
UTF8 и перевод assigncategories

6:9cd6b52df09f
Подчистки локализации

7:c2a2812d11ad
Backed out changeset: 2f09429039a6
  1. 可以在分支之间挑选变更集,阅读 hg help graft(基于合并的注入逻辑,而不是旧的 hg transplant)。有用或无用是人为选择的问题,在新父级之上移植的变更集的可操作性(无合并冲突)是移植本身的责任

如果嫁接合并导致冲突,则中断嫁接过程,以便手动解决当前合并。

【讨论】:

  • 对不起,不明白你的评论 1. 你的意思是我不应该为此目的使用--close-branch;如果是这样,为什么?或者你的意思是它可以用于其他目的吗?如果有,有哪些用途?
  • @Max - 是的,您不得为此目的使用 --close-branch ,因为它没有帮助。 --close-branch on commit 只是将 this head of branch 标记为关闭,即 hidden from hg heads (default) output
猜你喜欢
  • 2021-05-08
  • 2011-11-01
  • 2022-11-02
  • 2019-03-28
  • 2016-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-02
相关资源
最近更新 更多