将分支 Y 合并到 X 后,创建了三个版本的文件:fetch(X)、merge(X) 和 X

After merging branch Y into X, three versions of the file created: fetch(X), merge(X) and X

我正在尝试将 master 分支合并到 original 分支中。它们是不同的分支。

我只是运行

git checkout original
git merge master

正如我所料,这导致了很多冲突。

我打开了一个包含冲突的文件,当我 运行 git diff 这个文件(使用 vim-fugitive)时,出现了三个分裂;一个叫 fetch(original),一个叫 original,第三个叫 merge(original)

我不明白为什么 git diff 有三个版本,或者它们到底是什么。我在 git 个分支或日志中找不到它们。我应该如何使用它们来解决冲突?

一共有三个版本,因为你做的是三向合并。它们是基础版本、本地版本和远程版本。标准 git 术语是 baseourstheirs;您还可以通过 :1:filaname:2:filename:3:[=22= 获取它们]文件名 blob 引用。

其实有四个:还有合并结果所在的工作树文件。 diff 操作会显示合并结果和合并的两侧,本地(第 2 阶段)和远程(第 3 阶段)。

您使用 3 路合并算法的目标是将 base 和我们之间的变化与 base 和他们之间的变化结合起来。 git mergetool 命令可以帮助您。为此,我建议使用 kdiff3(即安装它,配置 git 以使用它,然后 git mergetool 将根据需要启动它)。