在Git diff commit范围中的点“...”?
以下命令之间有什么区别?:
git diff foo master # a
git diff foo..master # b
git diff foo...master # c
diff手册谈到它:
比较分支机构
$ git diff topic master <1>
$ git diff topic..master <2>
$ git diff topic...master <3>
但我不完全清楚。
由于我已经创建了这些图像,我认为它可能值得在另一个答案中使用它们,尽管对..
(dot-dot)和...
(dot-dot-dot)之间区别的描述本质上是相同的就像manojlds的回答一样。
git diff
命令通常只显示提交图中恰好两个点之间的树状态之间的差异。 git diff
的..
和...
符号具有以下含义:
换句话说, git diff foo..bar
与git diff foo bar
完全相同; 都会告诉你两个分支foo
和bar
的提示之间的区别。 另一方面, git diff foo...bar
将向您显示两个分支的“合并基础”和bar
的尖端之间的区别。 “合并基础”通常是这两个分支之间共同的最后一个提交,因此该命令将向您显示您的工作bar
已引入的更改,同时忽略了同时在foo
上完成的所有操作。
这就是你需要知道的关于git diff
的..
和...
符号。 然而...
......在这里混淆的一个常见来源是..
和...
在用于诸如git log
类的命令中使用时会有微妙的不同,它需要一组提交作为一个或多个参数。 (这些命令最终都使用git rev-list
从它们的参数中解析提交列表。)
git log
的..
和...
的含义可以用图形显示如下:
因此, git rev-list foo..bar
向您显示了分支bar
上不是在分支foo
。 另一方面, git rev-list foo...bar
向您显示所有在foo
或bar
的提交,但不是两者都提交。 第三个图表显示如果列出两个分支,您将获得其中一个或两个分支中的提交。
好吧,无论如何,我觉得有点混乱,我认为提交图表帮助:)
¹我只会说“典型”,因为解决合并冲突时,例如, git diff
会向您显示三向合并。
git diff foo master
foo和master的顶端(头部)提交之间的git diff foo master
。
git diff foo..master
做同样事情的另一种方法。
git diff foo...master
从git diff foo...master
的共同祖先( git merge-base foo master
)到Master的尖端的git diff foo...master
。 换句话说,只显示主分支自从它与foo共同的祖先以来所引入的变化。
这个来自GitHub的例子解释了何时使用这两个:
例如,如果你创建了一个'dev'分支并为一个文件添加一个函数,然后回到你的'master'分支并从README中删除一行,然后运行如下所示:
$ git diff master dev
它会告诉你,第一个文件中添加了一个函数,并且一行被添加到README中。 为什么? 因为在分支上,README仍然有原始的行,但是在'master'中你已经删除了它 - 所以直接比较快照看起来像'dev'添加了它。
你真正想要比较的是自你的分支分歧以来,“开发”已经发生了什么变化。 要做到这一点,Git有一个很好的简写:
$ git diff master...dev
我的综合版本的.. ... VS与差异 VS 日志
链接地址: http://www.djcxy.com/p/43563.html上一篇: dot "..." in Git diff commit ranges?
下一篇: How to rename master branch and make another branch as master?