3 回答
TA贡献1818条经验 获得超11个赞
由于我已经创建了这些图像,我认为在另一个答案中使用它们可能是值得的,尽管..(点 - 点)和...(点 - 点 - 点)之间的差异的描述与manojlds的答案基本相同。
该命令git diff通常只显示提交图中两个点之间树的状态之间的差异。在..和...中符号git diff的含义如下:

换句话说,git diff foo..bar完全一样git diff foo bar; 两者都将告诉你两个分支的末端之间的差异foo和bar。另一方面,git diff foo...bar将显示两个分支的“合并基础”和尖端之间的区别bar。“合并基础”通常是这两个分支之间的最后一个共同提交,因此该命令将向您显示您的工作bar所引入的更改,同时忽略同时完成的所有操作foo。
这就是你需要了解的所有内容..和...符号git diff。然而...
...混乱的常见原因这里是..和...一个命令中使用时,如意味着微妙的不同的东西git log期望一个组提交的一个或多个参数的。(这些命令最终都git rev-list用于解析其参数中的提交列表。)
..and和...for 的含义git log可以用图形方式显示如下:

因此,git rev-list foo..bar向您显示分支bar上不存在的所有内容foo。另一方面,git rev-list foo...bar向您显示所有提交foo 或 两者中的提交bar,但不是两者。第三个图表只显示如果列出两个分支,则会获得其中一个或两个分支的提交。
好吧,无论如何,我发现有点令人困惑,我认为提交图表帮助:)
¹我只说“通常”,因为在解决合并冲突时,例如,git diff会向您显示三向合并。
TA贡献1806条经验 获得超8个赞
git diff foo master foo和master的top(head)提交之间的差异。
git diff foo..master 做同样事情的另一种方式。
git diff foo...master从git 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
- 3 回答
- 0 关注
- 1907 浏览
添加回答
举报
