与当前提交的祖先合并

时间:2012-02-07 21:52:55

标签: git mercurial branch dvcs darcs

如何合并先前被拒绝的想法来自同一分支,在各种修订控制系统中工作?哪个提供支持?

这是我受过教育的猜测 - 这个摘要准确吗?

Git和集中式VCS:据推测,您还原了要合并的提交。因此,您将尝试合并当前提交的祖先。我没试过这个,但我不认为它会得到很好的支持。我猜你可以与相关的祖先(后见之明的隐喻“分支点”)进行三向合并(你必须要识别,因为它没有记录) - 但是VCS会支持这个还是你必须自己做?

Mercurial,使用书签(或以与书签类似的方式使用匿名分支):如果您努力使用这种方法,那么您将有“逆转过程”并从旧提交的祖先分支出来。你先前拒绝了它。因此,提交,即使它最初是在这个分支上完成的,现在不在这个分支上(因为书签是动态的,不是一成不变的,因为你改变了路线),所以根本没有问题。合并了!

Darcs,如果头部和旧提交之间没有标签:在darcs中,它看起来随意一瞥,好像你有一行直接提交,你实际拥有的是第一次提交或者第一次提交之间的依赖关系图。最新的标签和头部(这一点都不明显,AFAIK仍然没有可视化的工具!)。因此,如果darcs认为你的旧提交独立于当前的头部(这可能是很有可能的,因为你已经恢复了旧的提交),它们是不可见的独立分支,并且可以非常愉快地合并。如果darcs认为旧的提交取决于头部,那么这种情况可能就像git一样,尽管我认为没有人完全理解darcs补丁理论,除了David Roundy。

Darcs,如果同时有一个标签:我认为这就像git一样,因为标签将所有不可见的头捆绑在一起并形成一个依赖于所有这些头的头(这可能是其中之一)最简单易懂的darcs补丁理论方面)

脚注:为了简洁起见,我在整个过程中都提到了“旧提交”,尽管之前被拒绝的想法当然可能是一长串提交。

1 个答案:

答案 0 :(得分:1)

使用Git,我们的想法是创建一个分支,从您要隔离的第一个旧提交开始,然后cherry-pick新分支上的旧提交。

一旦你将它们隔离在自己的分支中,你就可以将它合并到你想要的任何其他分支。