我还没有看到类似这样的东西,因为那里的大部分内容都是关于显示当前起源/发展与当前分支之间的差异。
我所追求的是与我分支开发时的差异(例如,一个月前,开发已经发生变化)以及我的功能分支中的变化。
所以,让我们说我从开发分支,更改了几个文件,现在我想比较我最初创建分支和现在之间的差异。
我该怎么做?
答案 0 :(得分:4)
TL; DR:git diff develop...feature-X
分支机构不承载创建信息 - 分支名称只是指向一个特定提交的指针,其特殊功能是当您在" on"分支(如,git status
表示on branch xyz
"),并进行新的提交,指针自动移动以指向新的提交。
换句话说,分支名称自动指向分支的提示。这是 分支的工作原理,在git中,我们定义了"分支" as"我们可以通过从分支名称指向的提示开始来获得每个提交。"
(旁注:远程跟踪分支是相似的,除了您无法检查它们以及#34;它们,因此您无法更新远程跟踪分支。远程跟踪分支背后的想法是它跟踪远程存储库中的其他提交的提交,在那个分支上进行提交并进行提交。由于我们只对下面的提交感兴趣,因此您可以在我们使用origin/develop
的任何地方使用develop
。)
那就是说,只要你(a)从你第一次创建分支机构起就没有合并任何东西,或者(b)真的想看看发生了什么 em>那一点,你想要的是对合并基础进行区分。
让我们绘制一些提交图,以显示我的意思。假设您已经feature-X
,并且您在develop
之前提交了一些提交内容,develop
此后一直向前推进:
... <- o <- * <- o <- o <- o <-- develop
\
o <- o <- o <- o <-- feature-X
标记为*
的提交是两个分支连接的地方:commit *
,并且每个早期提交都在两个分支上,而提交&#34;后&#34;标记为*
的标记仅在develop
或feature-X
上。历史记录加入的这一点是合并基础:最接近两个分支上的两个分支的提示的提交。
听起来你现在想要的是将提交*
的内容与feature-X
上提交最多提交的内容进行比较。
使用合并库有多种方法。最直接的是使用git merge-base
:
$ git merge-base feature-X develop
这将打印合并库的SHA-1哈希,现在您可以运行:
$ git diff <sha-1> feature-X
将给定与feature-X
点的提交进行比较(当然,这是该分支的提示)。
但事实证明,合并基础在其他方面非常有用。因此gitrevisions
中有一个特殊的语法用于处理两个分支提示(或任何两个提交,真的)和它们的合并基础,即三点X...Y
语法。
通常情况下,develop...feature-X
(注意三个点)表示&#34;这些分支的一个上的每个提交 - 一个 - 但是上没有提交两个分支&#34;。也就是说,它包含之后的所有小o
个节点,我们将其作为提交*
绘制,但不提交*
本身,也不提交任何提交在它之前。
但是,对于git diff
,三点语法的含义略有不同:
$ git diff develop...feature-X
这找到两个分支之间的合并基础 - 即提交*
- 然后将该合并基础与命名的右侧提交区分开来,即特征-X的提示。
如果你想看看develop
中发生了什么,只需颠倒双方:
$ git diff feature-X...develop
和以前一样,git会找到合并基础,然后将其与右侧提交进行比较,这次是develop
的提示。
如果您忘记了这些详细信息,请查看gitrevisions
和git diff
的文档。
答案 1 :(得分:1)
这里有两个步骤(如果你愿意,可能会提出一个单行程):
1)Find the last commit before the branch was created
2)从(1)中取出哈希 - 让我们称之为aabbcc
- 并在diff中使用它:git diff aabbcc..HEAD