Git冲突:基础版本和其他版本之间的差异

3
在Bazaar中,如果您在foo.html文件中有冲突,它将会生成额外的3个文件。
foo.html.BASE
foo.html.OTHER
foo.html.THIS

然后您可以:
diff -Naur foo.html.BASE foo.html.OTHER

将常见的基础与其他一组更改进行比较非常有帮助,因为它告诉您他们确切地更改了什么,这有助于回答为什么要这样做。例如,如果他们更改的只是空格,那么您可以自信地使用自己的更改。

我如何在git中实现这一点?

2个回答

4

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 ......

2
要在外部工具中获取两个文件的简单差异,您可以使用 git difftool
在冲突解决情况下,您也可以使用 git mergetool
它们共享一定的配置和使用选项,但是git mergetool实际上会创建类似于您从Bazaar中了解的文件。关于此的详细信息在上面链接的手册中有描述。 difftoolmergetool知道一些常见的diff和merge工具,并且可以在不进行进一步配置的情况下使用它们(例如vimdiff、meld、k3diff等),但是您可以配置自己的工具或使用自定义选项来更改这些工具的行为。
您应该尝试让mergetool做您想要的事情(例如,可以将mergetool配置为在合并工具退出后不删除那些文件,以便您可以进一步检查它们)。现在您有了一个起点,谷歌也会帮助您,特别是如果手册对您而言太过技术化。
如果遇到具体问题,您可以提出新的问题;)

还可以查看https://dev59.com/SHVC5IYBdhLWcg3wjx5d以配置您选择的差异工具... - Jens Peters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接