git diff origin/master ... origin/branch 和 git diff origin/master...origin/branch 之间有什么区别?

3

当比较时,Git diff 返回不同的更改:

git diff origin/master ... origin/branch
git diff origin/master...origin/branch

什么是这两者之间的区别?对于那些无法看出第一个命令中的差异的人来说,... 命令周围有空格缓冲。
2个回答

5
通常,“点”表示指定范围,并且完整的文档可以在“git log --help”部分“指定修订版本”中找到,主要用于列出类似于“git log”的清单。简而言之,您有两个从提交a开始的分支。
a - b - c (master)
\d - e (topic)

git log master..topic会显示从topic可达却不可达master的提交,实际上是"d"和"e"

git log topic..master会显示从master可达但不可达topic的提交,实际上是"b"和"c"

现在git log master...topic(请注意三个点)会显示从master或topic可达但不从两者都可达的所有提交,实际上是b、c、d和e

但差异是使用两个历史点而不是范围,例如符号表示

git diff topic master

git diff topic..master

应该返回相同的结果,即指定分支的末尾之间的差异。三个点的标记符号

git diff topic...master

应该显示从主分支派生话题分支以来出现的更改。
正如Jan所指出的,由空格包围的三个点的标记符号在git中被理解为分支末端之间的差异(就像没有点或两个点一样),当HEAD指向其中一个感兴趣的分支所指向的相同提交时。如果HEAD既不是topic也不是master,则会导致三路差异。
希望这可以帮助你!

我已经取消了反对票,但仍然认为关于日志的讨论是多余的。我现在也检查了行为,正如我所怀疑的那样——当AB都不等于HEAD时,git diff A ... B会给出三方差异。 - Jan Hudec
1
我看到很多人被log和diff之间的差异以及点符号的使用所困惑,这就是为什么我决定解释一下它们之间的区别。至于三路diff——这是一个很好的观察,我以前从未使用过它。 - Eugene Sajine

2
正确的语法应该是没有空格的,从共同祖先到右分支进行差异比较。
如果有空格,会出现错误,因为...既不是修订版也不是路径,但参数解析器将其视为HEAD 的同义词。这可能是...branch意味着HEAD...branchbranch...意味着branch...HEAD的副作用。再加上git diff 可以接受任意数量的参数,并在给定超过2个不同参数时产生n路差异。我已经检查过了,确实当AB都没有指向与HEAD相同的修订版本时,git diff A ... B会产生一个3路差异。

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