有没有一种简单的方法来检查合并/ rebase是否会产生文件冲突,而不实际执行合并/ rebase?
我希望能够决定是否:
由于错误的合并(由人为错误解决冲突导致的错误)更容易检测和反转,如果我做两个头的合并,而不是做了rebase。特别是如果我推动我的改变而后来意识到某些事情搞砸了。
(事先无法检查所有内容,因为我们没有完全全面的测试套件。)。
而且......我正在运行Windows。 :)
答案 0 :(得分:11)
所以,在Martin的回答的帮助下,我想出了rebaseif扩展,它做了我想要的。
基本上,它尝试使用内部合并工具进行rebase,如果失败(它会对任何冲突造成),它会中止并与用户首选工具合并。
有关详细信息,请参阅https://bitbucket.org/marcusl/ml-hgext/src/tip/rebaseif.py。
<强>更新强>
最近几个月,我又回到了合并,因为它本身就是安全的。由于依赖文件可能会影响更改,因此非冲突的rebase可能仍然存在问题。 (即,一个rebase在合并之前丢失了代码看起来的信息)。
作为rebaseif的作者,我建议使用普通的旧合并代替。 :)
答案 1 :(得分:4)
如果更改重叠,则没有理由使用hg merge
,hg rebase
,否则hg rebase
会在内部进行合并,并允许您使用与{{1}相同的工具解决此问题}。
至于测试合并或rebase是否会引起冲突,那么你可以使用
hg merge
在Mercurial 1.7中覆盖您的正常merge tool configuration。 ($ hg merge --tool internal:merge
部分是新的,在早期版本的Mercurial中使用--tool internal:merge
。)
合并后,
--config ui.merge=internal:merge
会告诉您结果,然后您将回到
开始的位置$ hg resolve --list
答案 2 :(得分:3)
您可以看到两个变更集REV1和REV2是否影响任何相同的文件:
(hg status --change REV1 --no-status ; hg status --change REV2 --no-status) | sort | uniq --repeated
如果有任何输出,则在两个版本中都会触及相同的文件。
这很容易成为像以下的shell脚本:
#!/bin/sh
(hg status --change $1 --no-status ; hg status --change $2 --no-status) | sort | uniq --repeated
可以像以下任何一个一样运行:
./find_overlaps c8f7e56536ab d9e2268e20b9
./find_overlaps 1 33
如果你真的想要得到想象,你可以调整脚本以自动运行merge或rebase,具体取决于是否找到任何行。
如果你在窗户上,我的上帝会帮助你。 :)