在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的不同方式

    换句话说, git diff foo..bargit diff foo bar完全相同; 都会告诉你两个分支foobar的提示之间的区别。 另一方面, git diff foo...bar将向您显示两个分支的“合并基础”和bar的尖端之间的区别。 “合并基础”通常是这两个分支之间共同的最后一个提交,因此该命令将向您显示您的工作bar已引入的更改,同时忽略了同时在foo上完成的所有操作。

    这就是你需要知道的关于git diff.....符号。 然而...


    ......在这里混淆的一个常见来源是.....在用于诸如git log类的命令中使用时会有微妙的不同,它需要一组提交作为一个或多个参数。 (这些命令最终都使用git rev-list从它们的参数中解析提交列表。)

    git log.....的含义可以用图形显示如下:

    说明为git日志指定提交范围的不同方法

    因此, git rev-list foo..bar向您显示了分支bar上不是在分支foo 。 另一方面, git rev-list foo...bar向您显示所有在foobar的提交,但不是两者都提交。 第三个图表显示如果列出两个分支,您将获得其中一个或两个分支中的提交。

    好吧,无论如何,我觉得有点混乱,我认为提交图表帮助:)

    ¹我只会说“典型”,因为解决合并冲突时,例如, git diff会向您显示三向合并。


    git diff foo master foo和master的顶端(头部)提交之间的git diff foo master

    git diff foo..master做同样事情的另一种方法。

    git diff foo...mastergit 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 日志

    差异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?