什么是在mercurial中支持多个变更集的最佳方法?

Jos*_*erg 16 mercurial

是最可靠的方法逐个使用,对许多变更集中的每一个使用backout命令,或者是否有一种方法可以创建一个大的反转变更集来覆盖一大堆[edit:non-contiguous]变更集.

如果一个接一个,订单是否重要?(一个人应该排在第一位吗?)

如果沿途不同子项目之间存在合并,那么最佳方法是否有所不同?

您的体验往往顺利吗?:-)

Hel*_*lgi 9

如果您在此过程中没有合并,则可以退出每个单独的更改(按相反顺序),或者,如果有很多更改,则使用一个大的反向修补程序执行此操作.

如果你需要退出的变更集上有好的变更集,最好在最近的不良变更集之上提交反补丁,然后将它们重新定位到分支的顶端.

1 -- 2 -- A -- B -- C -- 3 -- 4
                     \
                      C'B'A'

$ hg up C
$ hg diff -r C:2 > backout.diff
$ hg import --no-commit backout.diff
$ hg ci -m "Backout A, B, C"
$ hg up 4
$ hg rebase -s C'B'A -d .
Run Code Online (Sandbox Code Playgroud)

如果要退出合并更改集,则会出现问题,请参阅此Wiki页面以获取更多信息.

在这种情况下,如果可能的话,考虑重新做分支并剥离旧的血统.否则,您可能不得不完全放弃分支,通过移植或移植来挽救好的变更集.


Afr*_*ief 5

--collapse选择权rebase.

Helgi答案可以升级为:

1 -- A -- 2 -- B -- 3 -- C -- 4 -- 5
                          \
                           C' -- B' -- A'

$ hg update --clean C
$ hg backout --rev C --message "Backed out changeset: C"
$ hg backout --rev B
$ hg commit --message "Backed out changeset: B"
$ hg backout --rev A
$ hg commit --message "Backed out changeset: A"
$ hg rebase --collapse --source C' --dest 5
$ hg commit --message "Backed out C, B, A"
Run Code Online (Sandbox Code Playgroud)

这将产生以下结果

1 -- A -- 2 -- B -- 3 -- C -- 4 -- 5 -- C'B'A'
Run Code Online (Sandbox Code Playgroud)

但是,在单独的分支中退出可能会导致后续合并中的[逻辑]冲突.

1 -- A -- 2 -- B -- 3 -- X  --  4 
                     \           \
                      B' -- A' -- M
Run Code Online (Sandbox Code Playgroud)

如果X取决于AB,M则会产生冲突(至少是逻辑冲突).