3

在 Bazaar 中,如果您在 foo.html 中存在冲突,它将额外生成 3 个文件

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

那么你也能

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

将共同基础与另一组更改进行比较确实很有帮助,因为它可以告诉您它们到底改变了什么,这有助于回答他们为什么这样做。例如,如果他们更改的只是空白,您可以放心地使用自己的更改。

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

4

2 回答 2

4

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

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 ......
于 2013-02-04T22:11:05.373 回答
2

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

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

它们共享一组特定的配置和使用选项,但git mergetool实际上会创建类似于您从 Bazaar 知道的文件。上面链接的手册页中描述了有关此内容的详细信息。

difftool了解一些常用的 diff和mergetoolmerge 工具,无需进一步配置即可使用它们(例如 vimdiff、meld、k3diff 等),但您可以配置自己的或使用自定义选项来更改这些工具的行为。

您应该尝试mergetool做您想做的事情(例如,mergetool可以配置为在合并工具退出后不删除这些文件,以便您可以进一步检查它们)。既然您有了起点,Google 也会提供帮助,尤其是当手册页对您的口味而言过于技术性时。

如果您遇到具体问题,您可以提出一个新问题;)

于 2013-02-04T22:08:15.097 回答