在冲突时始终使用合并分支中的版本

9

目前我正在一个功能分支上工作,很快将合并回主分支。最近我尝试了这个过程,但出现了一些合并冲突,需要手动修复。

所以,有没有可能告诉git始终使用来自合并分支的版本,以避免事先的合并冲突?在这种情况下,我手动解决了冲突,但总是选择了来自合并分支的版本,因此这可以为我节省一些繁琐的工作。

2个回答

18
你可以在git中使用以下命令做到这一点,假设feature是你的特性分支的名称:
git merge -s recursive -X theirs feature

这里建议使用“递归”合并策略,但同时选择“theirs”选项。这意味着当发生冲突时,将自动采用来自特性分支的版本来解决,而不是当前分支的版本。(请注意,这与现在已从git中删除的“theirs”合并策略完全不同。)

此功能是在git v1.7.0中引入的。


你确定吗?难道这个策略不是让所有文件都从一个侧面传输过来了吗,而不仅仅是冲突的文件吗? - Adam Dymitruk
是的,这就是旧的theirs合并策略所做的事情,但是在递归策略中选择theirs选项会做一些不同的事情 - 它会执行普通合并,但会自动以"他们"的版本解决任何冲突。 - Mark Longair
好知道!不过似乎有些危险。那么冲突文件本身呢?递归-theirs会使用未发生冲突的更改吗?还是会获取整个文件? - Adam Dymitruk
@adymitruk:git merge手册中的描述说它只用于有冲突的hunks,所以它将包括我们的更改,即使文件中有其他冲突的hunks也是如此。 - Mark Longair
我猜你在合并时要看它认为的代码块。感觉有点不安...但这就是为什么我们有单元测试的原因 :) - Adam Dymitruk

0

你不能使用递归的“ours”策略。它会忽略未发生冲突的更改。

你可以编写脚本获取冲突文件的文件名,然后执行 git checkout --ours -- filename,接着是 git add filename。

如果你一遍又一遍地得到相同的冲突,请打开 rerere 功能,这可能足以让你不必解决冲突。

希望这可以帮助到你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接