2012-12-02 42 views
0

我对主(且唯一)分支做了一些更改(A)。然后我的同事做了一些其他的改变(B)。然后我发现变化(A)已经绝望了,我决定彻底抛弃它们。另一方面,变化(B)非常好,幸运的是完全独立于chanegs(A)。变化(B)的体积远小于变化(A)。通过关闭分支来恢复丢失的有用更改

通常,我只是hg commit --close-branchdescribed here。但是然后我失去了变化(B),并且需要在新的活动分支中重新创建它们。我可以通过简单地识别受影响的文件(手动)并更新它们(手工)然后提交来实现。这显然并不完美,因为它需要两个手动步骤,并且还会在存储库中创建一个误导提交(误导,因为更改是由我的同事在不久前完成的,但看起来好像它们是我今天创建的)。我想这不是世界末日,但是有没有更优雅的解决方案?

注意:如果Mercurial支持将仅从差异从一个提交到修订树中的另一个位置,它将会起作用。但是我怀疑这个特性并不存在,原因很多:当逐字地应用到另一个父变更集时,diffs vs现有父变更集非常有用。

+1

“如果Mercurial支持仅应用差异从一个提交到另一个位置在修订树中,它就会起作用。” - 它的命令称为'graft'。同样'rebase --keep'也会做类似的事情。 –

回答

3
  1. --close-branch有另一个理由,不是丢弃坏变更
  2. 可以通过提供“撤销,变更”撤消任何变更,在更早的历史呈现,读hg help backout,共同hg backout CSET-HASH反向变化,CSET,HASH完成为的额外成本犯回购

使用回退为杀死的旧变更效果的实施例(REV。7撤消订正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. 可以分支之间樱桃挑选变更(S),读(而不是注入的旧hg transplant的合并基于逻辑)hg help graft。有用或无用的人的选择,新的父(没有合并conflics)的顶部嫁接变更的可操作性的问题是移植物本身

的责任,如果移植合并在冲突结果,移植过程被中断,以便当前合并可以手动解决。

+0

对不起,您的评论不理解1.您的意思是我不应该为此使用'--close-branch';如果是这样,为什么?或者你的意思是它可以*用于其他目的;如果是这样,用途是什么? – max

+1

@Max - 是的,你**不能**使用--close-branch为此目的,只是因为它没有帮助。 - 在提交时关闭分支只是将分支的这个头关闭,即从*'hg heads'隐藏(默认)*输出* –