如何在多个分支上更改文件时如何正确合并git分支?

时间:2015-10-22 09:58:33

标签: git git-merge

我们正在处理不同分支上的文件。

合并后,最终代码变得错误,即使它在合并之前在每个分支上都能正常工作。

我使用此处提供的接受答案作为分支/合并策略: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上,我编辑代码以打印 a 的值。

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);
  }
}

将master合并到newBranch并在将其合并回master之前进行测试是否是一个好习惯?

2 个答案:

答案 0 :(得分:1)

“将master合并到newBranch并在将其合并回master之前进行测试是不错的做法?”

是。在这种情况下,代码在之后不起作用是完全合理的。毕竟,有人删除了一些代码,并添加了一段代码。更改不在同一位置,因此没有冲突。 Git不是编译器,也不知道更改之间的关系,因此应用了这两个更改,您必须手动解决此问题。

答案 1 :(得分:0)

您始终可以使用git rerere将合并结果应用于所有givenm分支。

git rerere只记录您解决冲突的方式,然后当不同分支上出现相同的冲突时,它只会应用您创建的补丁来解决所有冲突。

了解更多

git rerere
Fix conflicts only once with git rerere