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 master
foo和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 关注
- 1774 浏览
添加回答
举报