我如何在我的 Git 存储库中解决合并冲突?


当前回答

识别哪些文件处于冲突中(Git应该告诉你这一点)。 打开每个文件并检查Difs; Git demarcates它们. 希望它将是显而易见的哪个版本的每个区块保持。 你可能需要讨论它与同开发人员谁承诺的代码. 一旦你解决了冲突在一个文件 git 添加到_file. 一旦你解决了所有冲突,做 git rebase --continue 或 whateve

其他回答

我喜欢使用WinMerge(免费工具),它既是整个目录树的比较/混合,而且是整个目录树的个别文件(s)比较/混合。

解决的步骤可以是:

也就是说,没有魔法的方式来解决 Git 合并的冲突,除了手动观察每个人对相同的源文件(s)做了什么。

这就是我所想的。

注意: WinMerge 创建.bak 文件.. 并且您不希望它们复制到源控制 AzOps, TFS 等,所以如果您确信您已经完成了正确的编辑,删除.bak 文件。

识别哪些文件处于冲突中(Git应该告诉你这一点)。 打开每个文件并检查Difs; Git demarcates它们. 希望它将是显而易见的哪个版本的每个区块保持。 你可能需要讨论它与同开发人员谁承诺的代码. 一旦你解决了冲突在一个文件 git 添加到_file. 一旦你解决了所有冲突,做 git rebase --continue 或 whateve

有三个步骤:

查找哪些文件导致冲突的命令 git 状态 查看文件,在其中你会发现冲突标记为 <<<<<<<头 blablabla 将其改为你想要的方式,然后与命令 git 添加解决_conflicts_files git commit -m 混合 msg

如果您正在使用 IntelliJ IDEA 作为 IDE,请尝试通过:

git checkout <localbranch>
git merge origin/<remotebranch>

它将显示所有类似的冲突:

A_MBPro:test anu$ git merge 起源/ 自动合并 src/test/java/com/.../TestClass.java CONFLICT (内容): 合并冲突 src/test/java/com/.../TestClass.java

现在请注意,TestClass.java 文件在 IntelliJ IDEA 中显示为红色。

此外,Git 状态也将显示:

Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified:   src/test/java/com/.../TestClass.java

在 IntelliJ IDEA 中打开文件,将有与

  <<<<<<< HEAD
    public void testMethod() {
    }
    =======
    public void testMethod() { ...
    }
    >>>>>>> origin/<remotebranch>

在哪里,头部是你的本地分支和起源的变化/<remotebranch>是从远方分支的变化. 在这里保持你需要的东西,并删除你不需要的东西。

   git add TestClass.java
   git commit -m "commit message"
   git push

我明白什么是合并冲突,但当我看到Git diff的输出时,这对我一开始就看起来很荒谬:

git diff
++<<<<<<< HEAD
 + display full last name boolean in star table
++=======
+ users viewer.id/star.id, and conversation uses user.id
+
++>>>>>>> feat/rspec-tests-for-cancancan

但是,这里是帮助我的一点:

<<<<<和 =======之间的一切都是在一个文件中的一切,而在 =======和 >>>>>之间的一切都是在另一个文件中的一切,所以你必须做的就是打开与合并冲突的文件,并从任何分支中删除这些线条(或者只是让它们相同),合并将立即成功。