SourceTree 在解冲突时,如果使用“使用他人版本解决冲突”,不是指冲突部分使用他人版本,而是将整个文件“使用他人版本替换”,这个就恶心了。
举例
原文件:
var a = 0;
var b = 0;
var c = 0; // CoderA changed
CoderA 修改版本:
var a = 1; // CoderA changed
var b = 0;
var c = 1; // CoderA changed
CoderB 修改版本:
var a = 0;
var b = 0;
var c = 2; // CoderB changed
合并时会出现,第三行冲突:
var a = 1; // CoderA changed
var b = 0;
<<<<<<< CoderA version
var c = 1; // CoderA changed
=======
var c = 2; // CoderB changed
>>>>>>> CoderB version
如果此时使用 SourceTree 的“使用他人版本解决冲突”功能,结果如下:
var a = 0;
var b = 0;
var c = 2; // CoderB changed
整个文件完全等同于 CoderB 的版本,这个显然是不对的,我们希望只有冲突那行变为 CoderB 的版本,应该如下:
var a = 1; // CoderA changed
var b = 0;
var c = 2; // CoderB changed
这才是正确的。
总结
SourceTree 解冲突有坑,“使用 XX 版本解决冲突”功能慎用,还是要手动解!
版本
SourceTree 版本:2.7.6(177)
内置 Git 版本:2.17.1