如何在多个分支上更改文件时正确合并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修复一次冲突

链接地址: http://www.djcxy.com/p/49317.html

上一篇: How to merge a git branch properly when a file is changed on multiple branches?

下一篇: Using git as an R&D tool