如何在多个分支上更改文件时正确合并git分支?
我们正在处理不同分支上的文件。
合并后,最终的代码会变得错误,即使它在合并之前可以在每个分支上正常工作。
我使用这里给出的接受答案作为分支/合并策略:https://stackoverflow.com/a/5602109/4746692。
有没有我失踪的一步?
我在master分支上有文件。 示例代码
public class Test {
public static void main(String[] args) {
int a = 1;
int b = 2;
System.out.println(b);
}
}
我从这里分支到newBranch。
git checkout -b newBranch
在newBranch,我编辑的代码打印的值。
public class Test {
public static void main(String[] args) {
int a = 1;
int b = 2;
System.out.println(b);
System.out.println(a);
}
}
在master上,其他开发人员删除声明变量a的语句。
git checkout master
public class Test {
public static void main(String[] args) {
int b = 2;
System.out.println(b);
}
}
当我将newBranch合并回master时,变量a的声明将会丢失,并且print语句会抛出一个错误。 请注意,此合并不会导致任何合并冲突。
git checkout master
git pull origin master
git merge --no-ff newBranch
合并的代码看起来像
public class Test {
public static void main(String[] args) {
int b = 2;
System.out.println(b);
System.out.println(a);
}
}
将主进入newBranch并在将其合并回主人之前进行测试是否是一种好习惯?
“在将主合并回主人之前,将主人拉入newBranch并进行测试是否是一种好习惯?”
是。 在这种情况下,代码在事后不起作用是非常合理的。 毕竟,有人删除了一些代码,并添加了一段代码。 这些更改不在相同的位置,因此不存在冲突。 Git不是编译器,并且不知道这些更改之间的关系,因此这两个更改都已应用,并且您必须手动解决此问题。
您始终可以使用git rerere
将合并结果应用于所有给定的分支。
git rerere
简单地记录你解决冲突的方式,然后当相同的冲突出现在不同的分支上时,它将简单地应用你创建的补丁来解决所有冲突。
阅读更多
git rerere
用git rerere修复一次冲突
上一篇: How to merge a git branch properly when a file is changed on multiple branches?