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

时间:2012-10-26 19:03:07

标签: git

比较时,Git diff似乎会返回不同的变化:

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

两者有什么区别?对于那些在第一个命令中看不到差异的人,...由空格缓冲。

2 个答案:

答案 0 :(得分:4)

通常,“点”符号用于指定范围和完整文档,可在git log --help“指定修订”部分中找到,主要用于git log等列表。

简单地说,你有两个分支从提交a:

开始
a - b - c (master)
\d - e (topic)

git log master..topic会显示可以从主题访问但无法从主服务器访问的提交,实际上是“d”和“e”

git log topic..master将显示可从主设备访问但无法从主题访问的提交,实际上是“b”和“c”

现在git log master...topic(注意三个点)将显示所有可从主要或主题到达而不是从两者都可以进行的提交,实际上是b,c,d和e

差异虽然是两个历史点,但不是范围,例如符号

git diff topic master

git diff topic..master

应该返回相同的结果,即指定分支的尖端之间的差异 三点符号

git diff topic...master

应该显示自主题分支分离以来在master中发生的更改

正如Jan指出的那样,用空格包围的三个点的符号被git理解为当HEAD指向同一个提交时,分支尖端之间的差异(如无点或两个点)感兴趣的分支。如果HEAD既不是主题也不是主人,它将导致三方差异。

希望有所帮助!

答案 1 :(得分:2)

正确的语法没有空格,并且从共同的祖先到正确的分支。

对于空格,它应该是一个错误,因为...既不是修订版也不是路径,但是参数解析器将它作为HEAD的同义词。可能是事实的副作用,...branch表示HEAD...branchbranch...表示branch...HEAD。结合git diff可以获取任意数量的参数并在给出超过2个不同参数时产生n路差异的事实。当git diff A ... BA都指向与B相同的版本时,我已经检查过,确实HEAD会产生三向差异。