如何在没有死亡的情况下扭转合并对极化分支的影响?
这个问题困扰了我好几个月,我终于放弃了.
您有1个存储库,有2个 命名分支.A和B.
A发生的变化将不可避免地发生在B.
B上直接发生的变化绝不会发生在A上.
在这样的配置中,将"B"合并为"A"会在存储库中产生可怕的问题,因为对B的所有更改都出现在A中,就好像它们是在A中制作的一样.
从这种情况中恢复的唯一"正常"方式似乎是"退出"合并,即:
hg up -r A
hg backout -r BadMergeRev --parent BadMergerevBeforeOnA
Run Code Online (Sandbox Code Playgroud)
这看起来很好,花花公子,直到你决定稍后在正确的方向合并,你最终会发生各种令人讨厌的事情,特别是分支B上删除/注释掉的代码突然变得没有注意或没有注释.
到目前为止,还没有一个可行的解决方案,除了"让它做它的事情,然后解决所有的问题",说实话有点fubar.
这是澄清问题的图像:
[原始图像丢失]
文件C&E(或更改C&E)必须仅出现在分支b上,而不是出现在分支a上.这里的版本A9(分支a,revno 9)是问题的开始.
修订版A10和A11是"退出合并"和"合并退出"阶段.
并且修订版B12是多变的,错误地反复删除了意图不被删除的更改.
这种困境引起了很多挫折和蓝烟,我想结束它.
尝试禁止反向合并可能是一个明显的答案,无论是使用钩子还是使用策略,我发现这种情况相当高并且发生这种情况的可能性很大,即使采取了对策,你仍然必须假设它不可避免地会发生,以便你可以解决它.
在模型中我使用了Seperate文件.这些使问题听起来很简单.这些只是代表任意变化,可能是一个单独的路线.
此外,为了增加对伤害的侮辱,在分支A上发生了实质性的变化,留下了常见的问题"分支A的变化与分支B的变化发生冲突,分支B刚刚出现(并且退出)看起来像一个变化在分支A而不是"
所有这些追溯活动解决方案的问题如下:
(我承认,上面的许多内容都有些愚蠢,但它们超出了我的控制范围).
唯一可行的解决方案是假设人们能够并且将会做错事,并且有一种方法可以"消除"这种错误.
举一个简单的例子:我正在使用默认分支,在本地提交一些更改集,然后从主存储库中提取了一些更改集.我已经在我孤立的本地存储库中工作了几天,因此在将结果推回到master之前,要进行相当多的更改.
default ---o-o-o-o-o-o-o-o-o-o-o (pulled stuff)
\
o----o------------o (my stuff)
Run Code Online (Sandbox Code Playgroud)
我现在可以做两件事.
选项1:
hg pull
hg merge
Run Code Online (Sandbox Code Playgroud)
结果#1:
default ---o-o-o-o-o-o-o-o-o-o-o
\ \
o----o------------o-O
Run Code Online (Sandbox Code Playgroud)
选项#2:
hg pull
hg update
hg merge
Run Code Online (Sandbox Code Playgroud)
结果#2:
default ---o-o-o-o-o-o-o-o-o-o-o-O
\ /
o----o------------o
Run Code Online (Sandbox Code Playgroud)
这两个结果看起来与我同构,但在实践中似乎选项#2导致更小的变更集(因为它只对主线应用我的少量更改,而不是将所有主线更改应用于我的少数).
我的问题是:这有关系吗?我应该关心合并的方向吗?如果我这样做,我可以节省空间吗?(hg log --patch --rev tip在合并之后做的就是这样.)
我是Mercurial的新手,我还在努力建立一个工作流程.
我克隆了一个远程存储库.然后我进行更改并提交到我的本地存储库.我想推出一个干净的修订历史.我不想推出一些可能只会使远程存储库变得混乱的修订(例如,对方法进行拼写重命名,添加javadoc,删除空格等).这可能吗?
谢谢!