无远程分支的Git合并

无远程分支的Git合并,git,git-merge,Git,Git Merge,在从分支a到分支B执行GIT合并后,我通常通过比较(合并的)本地分支和(未合并的)远程分支来区分合并: git checkout mybranch git pull mybranch <do merge> git difftool --dir-diff origin/mybranch mybranch git签出mybranch git pull mybranch git difftool——dir diff origin/mybranch mybranch 这很有效。但是如果我

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

git checkout mybranch
git pull mybranch
<do merge>
git difftool --dir-diff origin/mybranch mybranch
git签出mybranch
git pull mybranch
git difftool——dir diff origin/mybranch mybranch
这很有效。但是如果我有一个本地分支,而没有一个远程分支,我就不能这样做


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

换句话说,您希望将合并前的最后一次提交与当前提交进行比较

git difftool -d HEAD^..

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

除了alfunx的答案之外,您还可以使用reflog命名方案来获取HEAD的早期版本(即,合并前的HEAD):


您可以检查git reflog
以确认与预期提交匹配。与
HEAD^
语法相比,它没有那么直接,但避免了任何可能的歧义,即您所反对的多父合并的哪一个父项。

出于好奇,我这样问,但我假设您正在检查两个分支之间的差异,以确保您的本地更改与远程更改相同,并且merge+pull命令工作正常(从而证明您的本地repo与远程相同),是吗?我在做远程推送之前,会做一个一般性的回顾。谢谢。当Git只是拉入变更集而没有合并提交时,这种方法对没有冲突的合并有效吗?在快进拉入的情况下,这种方法只有在拉入只包含一次提交时才有效。在这种情况下,您应该使用reflog作为@untible建议。您可以将范围描述缩短为
HEAD@{1}..
,如我在答案中所述。好的,或者您可以使用
git merge otherbranch--no ff
进行合并,然后使用此答案中的语法。是这样吗?是的,当然。虽然我不会仅仅为了能够使用这种语法而改变合并策略……但这些方法的唯一问题是,如果没有任何更改被合并,那么diff将列出最后两个头之间的差异,即使不是来自当前合并。然而,使用遥控器进行扩散的方法没有这个缺点。。。。
git difftool -d HEAD@{1}..HEAD