代码之家  ›  专栏  ›  技术社区  ›  Pat Notz

在Git提交范围内,双点“..”和三点“..”有什么区别?

  •  333
  • Pat Notz  · 技术社区  · 16 年前

    有些git命令接受commit范围,一个有效的语法是用两个点分隔两个commit名称。 .. ,另一种语法使用三个点 ... .

    这两者有什么区别?

    2 回复  |  直到 7 年前
        1
  •  215
  •   TOP KEK    9 年前

    这取决于你是否在使用 log 命令或命令 diff 命令。在 日志 箱子,在里面 man git-rev-parse 文档:

    要从提交中排除可到达的提交,将使用前缀^表示法。例如,^r1 r2表示可从r2到达的提交,但不包括可从r1到达的提交。

    这个集合操作经常出现 有它的简写。什么时候? 您有两个commits r1和r2(根据中解释的语法命名 指定上面的修订),您可以 请求可达到的承诺 从r2开始,不包括 可通过“^r1 r2”从r1访问,并且它 可写为“R1..R2”。

    类似的符号“R1…R2”是 称为R1和 r2,定义为“r1 r2——不 $(git merge base--所有r1 r2)“。它是 承诺的集合 可从R1或R2中的任何一个访问 但这两者都不是。

    这基本上意味着您将获得这两个分支中的任何一个分支中的所有提交,但不能同时获得这两个分支中的所有提交。

    微分 箱子,在里面 man git-diff 文档:

      git diff [--options] <commit>...<commit> [--] [<path>...]
    
          This form is to view the changes on the branch containing and up to
          the second <commit>, starting at a common ancestor of both
          <commit>. "git diff A...B" is equivalent to "git diff
          $(git-merge-base A B) B". You can omit any one of <commit>, which
          has the same effect as using HEAD instead.
    

    有点模糊。基本上,这意味着它只显示了该分支与另一个分支之间的区别:它查找最后一个常见的提交,第一个提交是您提供的,第二个提交是不同的。与此分支相比,查看该分支中所做的更改是一种简单的方法,而不必只注意此分支中的更改。

    这个 .. 有点简单:在 git-diff 箱子,和 git diff A B 只是在 日志 案例中,它显示了在B中而不是在A中的所有提交。

        2
  •  499
  •   Community    7 年前

    将提交范围与Git日志一起使用

    当您使用提交范围时 .. ... 具有 git log 它们之间的区别是,对于分支A和B,

    git log A..B
    

    会告诉你 所有B的承诺都是A没有的 ,同时

    git log A...B
    

    会告诉你 二者都 A有而B没有的承诺,以及B有而A没有的承诺,换句话说, 它将过滤掉A和B共享的所有提交,从而只显示提交 不要 两股 .

    使用维恩图和提交树实现可视化

    这是对 git log A..B . 分支B包含的不在A中的提交是提交范围返回的内容,并在venn图中以红色突出显示,在提交树中以蓝色圈示:

    "git log A..B" diagram Tree 1

    这些是用于 git log A...B . 注意以下承诺: 共享 两个分支都不会通过命令返回:

    "git log A...B" diagram Tree 2

    使三点提交范围 更有用

    您可以设置三点提交范围 在日志命令中使用 --left-right 显示属于哪个分支的提交的选项:

    $ git log --oneline --decorate --left-right --graph master...origin/master
    < 1794bee (HEAD, master) Derp some more
    > 6e6ce69 (origin/master, origin/HEAD) Add hello.txt
    

    在上面的输出中,您将看到属于 master 前缀为 < ,同时提交属于 origin/master 前缀为 > .

    使用带有git diff的提交范围

    有一天,我可能会为提交范围如何工作添加我自己的解释。 git diff ,但现在,您可能想签出 What are the differences between double-dot ".." and triple-dot "..." in Git diff commit ranges? .

    也见