在 Bazaar 中,如果您在 foo.html 中存在冲突,它将额外生成 3 个文件
foo.html.BASE
foo.html.OTHER
foo.html.THIS
那么你也能
diff -Naur foo.html.BASE foo.html.OTHER
将共同基础与另一组更改进行比较确实很有帮助,因为它可以告诉您它们到底改变了什么,这有助于回答他们为什么这样做。例如,如果他们更改的只是空白,您可以放心地使用自己的更改。
我如何在 git 中实现这一点?
在 Bazaar 中,如果您在 foo.html 中存在冲突,它将额外生成 3 个文件
foo.html.BASE
foo.html.OTHER
foo.html.THIS
那么你也能
diff -Naur foo.html.BASE foo.html.OTHER
将共同基础与另一组更改进行比较确实很有帮助,因为它可以告诉您它们到底改变了什么,这有助于回答他们为什么这样做。例如,如果他们更改的只是空白,您可以放心地使用自己的更改。
我如何在 git 中实现这一点?
git
不会将这三个文件的实际完整副本版本存储在您的工作目录中。相反,它存储一个文件,其中放置了冲突标记。但是,您仍然可以使用:<stage>:<filename>
语法获得这些版本(git
工具 - 文件实际上并不存在,因此,例如正常diff
不会看到它们)。因此,例如,您可以运行以查看和git diff :1:foo.html :2:foo.html
之间的差异。第 3 阶段将是您的版本。您也可以使用或。如果你真的需要对它们使用非工具,你可以这样做:BASE
THIS
OTHER
git mergetool foo.html
git 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 ......
要获得外部工具中文件之间的简单差异,您可以使用git difftool
.
在解决冲突的情况下,您还可以使用git mergetool
.
它们共享一组特定的配置和使用选项,但git mergetool
实际上会创建类似于您从 Bazaar 知道的文件。上面链接的手册页中描述了有关此内容的详细信息。
difftool
了解一些常用的 diff和mergetool
merge 工具,无需进一步配置即可使用它们(例如 vimdiff、meld、k3diff 等),但您可以配置自己的或使用自定义选项来更改这些工具的行为。
您应该尝试mergetool
做您想做的事情(例如,mergetool
可以配置为在合并工具退出后不删除这些文件,以便您可以进一步检查它们)。既然您有了起点,Google 也会提供帮助,尤其是当手册页对您的口味而言过于技术性时。
如果您遇到具体问题,您可以提出一个新问题;)