首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >双点"..“有什么区别?和三个点“..”在Git比较提交范围?

双点"..“有什么区别?和三个点“..”在Git比较提交范围?
EN

Stack Overflow用户
提问于 2011-08-31 08:53:26
回答 5查看 35.1K关注 0票数 234

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

代码语言:javascript
复制
git diff foo master   # a 
git diff foo..master  # b
git diff foo...master # c

The diff manual谈到了这个问题:

比较分支

$ git diff topic master <1> $ git diff topic..master <2> $ git diff topic...master <3>

  1. 在主题和主分支的提示之间进行更改。
  2. 同上。
  3. 自主题分支启动后在主分支上发生的更改。

但对我来说还不是很清楚。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-08-31 19:39:27

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

命令git diff通常仅显示提交图中恰好两点之间的树状态之间的差异。git diff中的.....表示法具有以下含义:

代码语言:javascript
复制
# Left side in the illustration below:
git diff foo..bar
git diff foo bar  # same thing as above

# Right side in the illustration below:
git diff foo...bar
git diff $(git merge-base foo bar) bar  # same thing as above

换句话说,git diff foo..bargit diff foo bar完全相同;两者都将向您展示两个分支foobar的提示之间的区别。另一方面,git diff foo...bar将向您展示两个分支的“合并基础”和bar的提示之间的区别。“合并库”通常是这两个分支之间的最后一个共同提交,因此此命令将显示您在bar上所做的更改,同时忽略在foo上所做的所有更改。

这就是关于git diff中的.....表示法所需了解的全部内容。然而..。

..。造成混淆的一个常见原因是,当在诸如git log之类的命令中使用时,.....的含义略有不同,因为该命令需要一组提交作为一个或多个参数。(这些命令最终都使用git rev-list从它们的参数中解析提交列表。)

.....对于git log的含义可以用图形表示,如下所示:

因此,git rev-list foo..bar向您显示分支bar上的所有内容,而分支foo上没有这些内容。另一方面,git rev-list foo...bar向您展示了foobar中的所有提交,但不是两者都有。第三个图只是显示,如果您列出两个分支,您将获得其中一个或两个分支中的提交。

不管怎么说,我发现这一切都有点令人困惑,我认为提交图有助于:)

»我只说“典型”,因为在解决合并冲突时,例如,git diff将向您显示一个三向合并。

票数 391
EN

Stack Overflow用户

发布于 2017-09-21 21:32:11

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

票数 79
EN

Stack Overflow用户

发布于 2011-08-31 10:52:20

git diff foo master在foo和master的顶级(头)提交之间存在差异。

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

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

来自GitHub的This example解释了何时使用这两种方法:

例如,如果你创建了一个‘

’分支并将一个函数添加到一个文件中,然后返回到你的‘主’分支并从自述文件中删除一行,然后运行如下代码:

$ git diff主开发

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

你真正想要比较的是,自从你的分支分叉后,“dev”发生了什么变化。要做到这一点,Git有一个很好的小速记:

$ git diff master...dev

票数 34
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7251477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档