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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (23)

以下命令有什么不同?

git diff foo master   # a 
git diff foo..master  # b
git diff foo...master # c

差分手册谈到这一点:

比较支路 $git diff主题主<1>$git diff主题...主<2>$git diff主题...主<3>

  1. 主题提示与主分支之间的更改。
  2. 和上面一样。
  3. 自主题分支从主分支启动以来发生的更改。

但我不太清楚。

提问于
用户回答回答于

由于我已经创建了这些图像,所以我认为在另一个答案中使用它们可能是值得的,

命令git diff通常,仅显示提交图中两个点之间树的状态之间的差异,.....符号git diff有以下含义:

换句话说,git diff foo..bargit diff foo bar两种方法都将向您展示这两个分支的尖端之间的区别。foobar。另一方面,git diff foo...bar将显示两个分支的“合并基”与bar。“Merge基”通常是这两个分支之间的最后一个提交,因此此命令将显示所做的更改。bar,而忽略了所有在foo同时。

这就是你所需要知道的.....符号git diff...。


...这里一个常见的混乱根源是.....在命令中使用时意味着微妙的不同事物,如git log它需要一组提交作为一个或多个参数。

意义.....git log如下所示:

所以,git rev-list foo..bar给你看树枝上的所有东西bar也不在分行foo...。另一方面,git rev-list foo...bar中的所有提交。foobar,但是不是两者兼而有之。第三个图表只是显示,如果列出这两个分支,将得到它们中的一个或两个分支中的提交。

不管怎样,我觉得这一切都有点混乱,我认为提交图图有帮助:

我只说“典型”,因为在解决合并冲突时,例如,git diff会向你展示一个三分合并。

用户回答回答于

git diff foo masterFoo和Master的顶部(头)提交之间的差异。

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

git diff foo...master区别(git merge-base foo master),换句话说,只显示主分支自其与主分支的共同祖先以来所进行的更改。

这个例子GitHub公司解释了何时使用这两种方法:

例如,如果创建了一个“dev”分支并将一个函数添加到一个文件中,那么回到“主”分支,从自述文件中删除一行,然后运行如下所示: $git diff主开发 它将从第一个文件中添加了一个函数,并将一行添加到自述文件中。为什么?因为在分支上,自述仍然有原始行,但是在“主”上已经删除了它--所以直接比较快照看起来像‘dev’添加的。 真正想要比较的是,自从分支分叉之后,“dev”发生了哪些变化。要做到这一点,吉特有一个很好的简短: $git diff...dev

扫码关注云+社区