小编典典

Git 提交范围中的双点“..”和三点“...”有什么区别?

all

一些 Git 命令采用提交范围,一种有效的语法是用两个点分隔两个提交名称..,另一种语法使用三个点...

两者有什么区别?


阅读 168

收藏
2022-03-11

共1个答案

小编典典

这取决于您使用的是log命令还是diff命令。在这种log情况下,它在man git-rev-parse文档中:

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

这个集合操作经常出现,以至于它有一个简写形式。当您有两个提交 r1 和 r2(根据上面指定修订中解释的语法命名)时,您可以请求可从 r2
访问的提交,不包括可通过“^r1 r2”从 r1 访问的提交,它可以写成“r1..r2”。

类似的符号“r1…r2”称为 r1 和 r2 的对称差,定义为“r1 r2 –not $(git merge-base –all r1
r2)”。它是可以从 r1 或 r2 之一但不能从两者中访问的一组提交。

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

在这种diff情况下,它在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 , starting at a common ancestor of both
. “git diff A…B” is equivalent to “git diff
$(git-merge-base A B) B”. You can omit any one of , which
has the same effect as using HEAD instead.

这有点模糊。基本上,这意味着它仅显示该分支与另一个分支相比的差异:它使用您给它的第一个提交查找最后一个常见提交,然后将第二个提交与该提交进行比较。与此分支相比,这是查看该分支中进行了哪些更改的简单方法,而无需仅注意此分支中的更改。

..稍微简单一些:在这种情况git-diff下,它与 a 相同git diff A B,只是将 A 与 B
进行比较。在这种log情况下,它显示了 B 中但不在 A 中的所有提交。

2022-03-11