是最可靠的方法逐个使用,对许多变更集中的每一个使用backout命令,或者是否有一种方法可以创建一个大的反转变更集来覆盖一大堆[edit:non-contiguous]变更集.
如果一个接一个,订单是否重要?(一个人应该排在第一位吗?)
如果沿途不同子项目之间存在合并,那么最佳方法是否有所不同?
您的体验往往顺利吗?:-)
如果您在此过程中没有合并,则可以退出每个单独的更改(按相反顺序),或者,如果有很多更改,则使用一个大的反向修补程序执行此操作.
如果你需要退出的变更集上有好的变更集,最好在最近的不良变更集之上提交反补丁,然后将它们重新定位到分支的顶端.
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页面以获取更多信息.
在这种情况下,如果可能的话,考虑重新做分支并剥离旧的血统.否则,您可能不得不完全放弃分支,通过移植或移植来挽救好的变更集.
有--collapse选择权rebase.
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取决于A或B,M则会产生冲突(至少是逻辑冲突).
| 归档时间: |
|
| 查看次数: |
6815 次 |
| 最近记录: |