git conflict:BASE版本和OTHER版本之间的差异

时间:2013-02-04 21:42:46

标签: git merge-conflict-resolution

在Bazaar,如果你在foo.html中有冲突,它会另外制作3个文件

foo.html.BASE
foo.html.OTHER
foo.html.THIS

然后你可以

diff -Naur foo.html.BASE foo.html.OTHER

将公共基础与其他更改集进行比较非常有用,因为它可以告诉您确切地改变了什么,这有助于回答他们为什么这样做。例如,如果他们所有更改都是空格,您可以放心地使用自己的更改。

如何在git中完成此操作?

2 个答案:

答案 0 :(得分:3)

git不会在工作目录中存储这三个文件的实际完整副本。相反,它存储一个放置了冲突标记的文件。但是,您仍然可以使用:<stage>:<filename>语法(git工具 - 获取这些版本 - 文件实际上并不存在,因此,例如,普通diff将无法看到它们。因此,举例来说,您可以运行git diff :1:foo.html :2:foo.html来查看BASETHIS之间的差异。第3阶段将是您的OTHER版本。您还可以使用git mergetool foo.htmlgit difftool foo.html。如果你真的需要在它们上使用非git工具,你可以这样做:

git show :1:foo.html > foo.html.BASE
git show :2:foo.html > foo.html.THIS
git show :3:foo.html > foo.html.OTHER
diff ......

答案 1 :(得分:2)

要在外部工具中获取文件之间的简单差异,您可以使用git difftool

在解决冲突的情况下,您还可以使用git mergetool

他们共享一组特定的配置和使用选项,但git mergetool实际上会创建类似于您在Bazaar中知道的文件。有关这方面的详细信息,请参见上面链接的手册页。

difftoolmergetool知道一些常见的差异和合并工具,无需进一步配置即可使用它们(例如vimdiff,meld,k3diff等),但您可以配置自己的或使用用于更改这些工具行为的自定义选项。

您应该尝试让mergetool执行您想要的操作(例如,mergetool可以配置为在合并工具退出后不删除这些文件,因此您可以进一步检查它们。现在您已经有了一个起点,Google也会提供帮助,特别是如果手册页太技术性,不适合您的口味。

如果您遇到特定问题,可以打开一个新问题;)