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

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

以下命令之间有什么区别?:


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>

主题提示与主分支之间的更改。

与上述相同。

自主题分支启动以来主分支上发生的更改。

但对我来说并不完全清楚。


繁星coding
浏览 1697回答 3
3回答

慕尼黑8549860

由于我已经创建了这些图像,我认为在另一个答案中使用它们可能是值得的,尽管..(点 - 点)和...(点 - 点 - 点)之间的差异的描述与manojlds的答案基本相同。该命令git diff通常只显示提交图中两个点之间树的状态之间的差异。在..和...中符号git diff的含义如下:换句话说,git diff foo..bar完全一样git diff foo bar;&nbsp;两者都将告诉你两个分支的末端之间的差异foo和bar。另一方面,git diff foo...bar将显示两个分支的“合并基础”和尖端之间的区别bar。“合并基础”通常是这两个分支之间的最后一个共同提交,因此该命令将向您显示您的工作bar所引入的更改,同时忽略同时完成的所有操作foo。这就是你需要了解的所有内容..和...符号git diff。然而......混乱的常见原因这里是..和...一个命令中使用时,如意味着微妙的不同的东西git log期望一个组提交的一个或多个参数的。(这些命令最终都git rev-list用于解析其参数中的提交列表。)..and和...for&nbsp;的含义git log可以用图形方式显示如下:因此,git rev-list foo..bar向您显示分支bar上不存在的所有内容foo。另一方面,git rev-list foo...bar向您显示所有提交foo&nbsp;或&nbsp;两者中的提交bar,但不是两者。第三个图表只显示如果列出两个分支,则会获得其中一个或两个分支的提交。好吧,无论如何,我发现有点令人困惑,我认为提交图表帮助:)¹我只说“通常”,因为在解决合并冲突时,例如,git diff会向您显示三向合并。

蝴蝶不菲

我的合并版本..&nbsp;vs&nbsp;...与diff&nbsp;vs&nbsp;log

慕森卡

git diff foo master&nbsp;foo和master的top(head)提交之间的差异。git diff foo..master&nbsp;做同样事情的另一种方式。git diff foo...master从git merge-base foo masterfoo和master&nbsp;的共同祖先()到master的tip。换句话说,仅显示master分支自fob的共同祖先以来引入的更改。GitHub的这个例子解释了何时使用这两个:例如,如果您创建一个'dev'分支并向函数添加一个函数,那么返回到您的'master'分支并从README中删除一行,然后运行如下所示的代码:$&nbsp;git&nbsp;diff&nbsp;master&nbsp;dev它会告诉您从第一个文件添加了一个函数,并在README中添加了一行。为什么?因为在分支上,README仍然具有原始行,但是在'master'上你已经删除它 - 所以直接比较快照看起来像'dev'添加它。你真正想要比较的是你的分支分歧后'dev'的变化。要做到这一点,Git有一个很好的小速记:$&nbsp;git&nbsp;diff&nbsp;master...dev
打开App,查看更多内容
随时随地看视频慕课网APP