当前位置:  开发笔记 > 编程语言 > 正文

Git提交范围中双点".."和三点"..."之间有什么区别?

如何解决《Git提交范围中双点".."和三点""之间有什么区别?》经验,为你挑选了2个好方法。

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

两者有什么不同?



1> 小智..:
使用提交范围与Git日志

当你使用像..和和的提交范围...git log,它们之间的区别在于,对于分支A和B,

git log A..B

将告诉你B所拥有的A所提交的所有提交,而

git log A...B

会告诉你这两个 A有和B不具备提交,而B已经是一个不具备,或者换句话说,在提交它会过滤掉所有的A和B股提交的,因此只显示他们同时共享的提交.

使用维恩图和提交树进行可视化

这是一个视觉表示git log A..B.分支B包含A中不存在的提交是提交范围返回的提交,并在维恩图中以红色突出显示,并在提交树中以蓝色圈出:

 树1

这些是图表git log A...B.请注意,命令不返回两个分支共享的提交:

 树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,但是现在,您可能想要查看Git diff commit中双点".."和三点"..."之间有什么区别?范围是多少?.

也可以看看

ProGit§6.1Git工具 - 修订选择 - 提交范围


这个答案实际上解释了简洁的文字,例子和图片的差异.我喜欢它比当前最受欢迎的答案更好,它只引用了不清楚的文档.(tl;博士,由于这个答案,我实际上了解其中的区别.)
@Cupcake你可以在git diff中添加意思吗?
至少对于git log.对于git diff,事情可能会逆转:http://stackoverflow.com/questions/7251477/what-are-the-differences-between-double-dot-and-triple-dot-in-git-dif#comment45515553_7256391

2> Pieter..:

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

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

此设置操作经常出现,因此有一个简写.如果你有两个提交r1和r2(根据上面的SPECIFYING REVISIONS中解释的语法命名),你可以要求从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] ... [--] [...]

      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,只是对B进行差异A.在这种log情况下,它显示了B中但不是A中的所有提交.


如果将`..`和`...`的含义完全交换为log和diff是非常荒谬的:`log A..B`是从merge base到B的变化,这就是`diff A ... B`不
我知道@phiresky。这是什么,PHP?p
推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有