Git 没有远程分支的合并

Git merge without remote branch

在完成从分支 A 到分支 B 的 GIT 合并之后,我通常通过比较(合并的)本地分支和(未合并的)远程分支来区分合并:

git checkout mybranch
git pull mybranch
<do merge>
git difftool --dir-diff origin/mybranch mybranch

这很好用。但是如果我有一个没有远程分支的本地分支,我就不能这样做。

在这种情况下,执行干净差异的最佳方法是什么?

换句话说:您想比较合并前的最后一次提交与当前提交。

git difftool -d HEAD^..

^ 指的是合并提交的第一个父级,在本例中为 HEAD^^1 的缩写)。 ..用于指定一个范围,如果任一侧为空Git将使用HEAD,所以上面的范围相当于HEAD^..HEAD.

除了alfunx的回答,你可以使用reflog命名方案来获取HEAD的先前版本(即合并前HEAD曾经是什么):

git difftool -d HEAD@{1}..HEAD

您可以检查 git reflog 以确认与预期的提交匹配。它没有 HEAD^ 语法那么直接,但避免了关于您要区分的多父合并的哪个父级的任何可能的歧义。