为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Git
繁星coding 2019-07-29 10:55:10
Git diff提交范围中双点“..”和三点“...”之间有什么区别?以下命令之间有什么区别?:git diff foo master   # a git diff foo..master  # bgit diff foo...master # cdiff手册谈到它:比较分支机构$ git diff topic master    <1>$ git diff topic..master   <2>$ git diff topic...master  <3>主题提示与主分支之间的更改。与上述相同。自主题分支启动以来主分支上发生的更改。但对我来说并不完全清楚。
查看完整描述

3 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

由于我已经创建了这些图像,我认为在另一个答案中使用它们可能是值得的,尽管..(点 - 点)和...(点 - 点 - 点)之间的差异的描述与manojlds的答案基本相同。

该命令git diff通常只显示提交图中两个点之间树的状态之间的差异。在.....中符号git diff的含义如下:

https://img1.sycdn.imooc.com//5d3e60bd000179de03800368.jpg

换句话说,git diff foo..bar完全一样git diff foo bar; 两者都将告诉你两个分支的末端之间的差异foobar。另一方面,git diff foo...bar将显示两个分支的“合并基础”和尖端之间的区别bar。“合并基础”通常是这两个分支之间的最后一个共同提交,因此该命令将向您显示您的工作bar所引入的更改,同时忽略同时完成的所有操作foo

这就是你需要了解的所有内容.....符号git diff。然而...


...混乱的常见原因这里是.....一个命令中使用时,如意味着微妙的不同的东西git log期望一个组提交的一个或多个参数的。(这些命令最终都git rev-list用于解析其参数中的提交列表。)

..and和...for 的含义git log可以用图形方式显示如下:

https://img1.sycdn.imooc.com//5d3e60c20001b41a06000336.jpg

因此,git rev-list foo..bar向您显示分支bar上不存在的所有内容foo。另一方面,git rev-list foo...bar向您显示所有提交foo  两者中的提交bar,但不是两者。第三个图表只显示如果列出两个分支,则会获得其中一个或两个分支的提交。

好吧,无论如何,我发现有点令人困惑,我认为提交图表帮助:)

¹我只说“通常”,因为在解决合并冲突时,例如,git diff会向您显示三向合并。


查看完整回答
反对 回复 2019-07-29
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

我的合并版本.. vs ...diff vs log


查看完整回答
反对 回复 2019-07-29
?
慕森卡

TA贡献1806条经验 获得超8个赞

git diff foo master foo和master的top(head)提交之间的差异。

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

git diff foo...mastergit merge-base foo masterfoo和master 的共同祖先()到master的tip。换句话说,仅显示master分支自fob的共同祖先以来引入的更改。

GitHub的这个例子解释了何时使用这两个:

例如,如果您创建一个'dev'分支并向函数添加一个函数,那么返回到您的'master'分支并从README中删除一行,然后运行如下所示的代码:

$ git diff master dev

它会告诉您从第一个文件添加了一个函数,并在README中添加了一行。为什么?因为在分支上,README仍然具有原始行,但是在'master'上你已经删除它 - 所以直接比较快照看起来像'dev'添加它。

你真正想要比较的是你的分支分歧后'dev'的变化。要做到这一点,Git有一个很好的小速记:

$ git diff master...dev


查看完整回答
反对 回复 2019-07-29
  • 3 回答
  • 0 关注
  • 1691 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信