【问题标题】:Github Comparison View for 2 branches is incorrect?2 个分支的 Github 比较视图不正确?
【发布时间】:2015-12-10 19:26:55
【问题描述】:

当我在master 和另一个分支A 之间执行Github comparison view 时,Github 似乎将A 的HEAD 版本与master 的较旧的非head 版本进行比较。

我查看了它,据我所知,Github 正在将分支 Amaster 的共同祖先进行比较。它实际上并没有将它与 master 的 HEAD 当前的内容进行比较。

有没有办法在 Github 中区分 master 的 HEAD 和 Branch A 的 HEAD?

如果不是,为什么不呢?这似乎是每个开发人员都希望能够做到的功能。或者是否有一些我可能遗漏的应该完成的过程?我希望能够直接从这些差异之一创建一个拉取请求。

编辑:这是一个显示问题的示例 repo

https://github.com/bradparks/test_github_diff_view

  • 我创建了一个包含单个文件 README.md 的新存储库
  • 我将此文件设置为包含单行 v100
  • 然后我将master分支到一个新分支A,并将行更改为`v200'
  • 然后我将 master 分支中的值更改为 'v300',然后使用比较链接比较 2 个分支

    https://github.com/bradparks/test_github_diff_view/compare/A

    我看到了以下意外结果。为什么它不针对 v300 而不是 v100

【问题讨论】:

  • 能否请您对您认为有错误的比较提供查询。 (没有 dv 顺便说一句)
  • @BradPranks:我说的是获取比较视图的 url(带有查询的 url,形式为:github.com/foo/bar?arg=val&oth=val2)。
  • @CommuSoft - 感谢您的反馈 - 我添加了一个显示问题的示例 repo,并将其添加到上面的问题中。
  • GitHub 与您上次从父分支合并的时间进行比较。如果您从未将 master 合并到您的分支中,那将是您创建分支的时间点。
  • 嗯...有趣...所以要将分支A 合并到master,我首先必须将master 合并到分支A 中?我的分支A 是一个特性分支。

标签: git github git-diff


【解决方案1】:

有没有办法在 Github 中区分 master 的 HEAD 和 Branch A 的 HEAD?

Sept 2018:是的:GitHub 现在明确支持“Three-dot and two-dot Git diff comparisons”。见an example here
keisuke提到in the commentssimilar initiative on Bitbucket

2015 年原始答案:

否:如“GitHub compare view for current versions of branches”中所述,GitHub 仅支持三点 (...) 范围快捷方式规范。
那就是:

此表单用于查看包含和直到第二个的分支上的更改,从两者的共同祖先开始。

git diff A...B”等价于“git diff $(git-merge-base A B) B”。
您可以省略 中的任何一个,这与使用 HEAD 的效果相同。

official GitHub help 提到此功能为:

比较最常见的用途是比较分支,例如当您开始一个新的拉取请求时。

在这种情况下,PR 分支从 master 开始(或者无论如何都应该在 master 之上重新建立),这意味着 master HEAD 是 master 和 PR 分支之间的基础。

但是当两个分支分叉后,比较的不再是HEADs,而是一个共同祖先和一个HEAD:git diff $(git-merge-base master B) B

注意:即使您要直接指定两个 SHA1,正如“Comparing commits”中明确记录的那样,仍然会执行git diff $(git-merge-base A B) B
这将不会直接在两个提交之间进行差异。

【讨论】:

  • 我试过了,效果很好。就像我必须在实际合并之前解决所有合并冲突,至少在我看来是这样;-) 但这不会让 Github 提供的“比较”视图几乎没用吗? 我知道他们在某种程度上受到 git 工作流程的限制,但在我看来,比较视图对 99% 的人来说仍然非常误导。考虑到它看起来很糟糕,我认为如果它甚至没有这个功能几乎会更好。
  • @BradParks 的目标确实是确保在提出任何 PR 之前在本地解决冲突:这样合并将快进。由于 PR 分支位于 master 之上,GitHub diff 将显示 master HEAD 和 PR 分支 HEAD 之间的差异。
  • @BradParks 我已经更新了我的答案,以解释为什么 leoger 的答案不起作用:您将始终与共同祖先不同,而不是另一个分支的 HEAD。
【解决方案2】:

有没有办法区分 master 的 HEAD 和 Branch A 的 HEAD 在 Github 上?

[编辑:不,我错了。我管理了一个 URL,看起来它会做正确的事情,并且页面上的差异看起来是正确的,但这是一个意外。如果您真的想了解更多信息,请查看此答案的历史记录。]

【讨论】:

  • 嘿...感谢您的反馈!我试过了,它似乎对我不起作用...... # 标记之后的所有内容都没有发送到服务器,我尝试将 url 更改为许多不同的东西,它们都给出了相同的结果。只是对 master 的最后一次提交,这使它看起来有点像工作。例如github.com/bradparks/test_github_diff_view/commit/…
  • 我有点困惑。如果您单击我提供给您的 test_github_diff_vew 存储库的链接,您看不到您想要的差异吗?我看到的差异显示“-v100”和“+v300”。 Github 是否为您和我显示了同一个 URL 的两个不同页面?
  • 当我以这种方式单击链接时,我确实看到了我想要的差异,起初我认为这很棒。但后来我意识到它只是显示了对主分支的最后一次提交。最后放什么并不重要,它总是只显示对该分支的最后一次提交。所以这不是一个差异,它只是一个指向单个分支的单个提交的链接。例如,github.com/bradparks/test_github_diff_view/commit/master
  • 嗯,你是对的!很抱歉没有更仔细地验证我的答案。
【解决方案3】:

只是另一个想法。如果您想从您的工作和主分支负责人之间的差异创建一个拉取请求(根据操作),那么您需要做的是首先将您自己的分支从主分支git rebase <master> 重新定位,然后拉取请求。

但是您通常不需要这样做,Git 在合并方面非常聪明,并且通常能够将您的工作添加到您想要添加的主分支中,即使您没有先变基。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-13
    • 1970-01-01
    • 2021-05-09
    • 2022-11-11
    • 2021-01-19
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多