当文件从一个分支检出到另一个分支时,Github UI 似乎没有跟踪分支之间的差异

问题描述

我的场景是这样的:

  1. 我在 Github 中有一个开发分支 (dev) 和一个生产分支 (prod)。
  2. 在我的 CLI 中,我从 prod 分支,从 dev 检出一组更改,并将这些更改合并到 prod(并推送到 Github)
  3. 在 Github 网络用户界面中,如果我随后以 prod 作为源创建对 dev 的拉取请求,它不会显示我已经从 dev 中挑选出的更改;它似乎遵循 dev 从未与 prod 合并的逻辑,因此忽略了我刚刚从 dev 中挑选出来并与 prod 合并的变更集。立>

有人能解释一下这背后的逻辑吗?这让我的团队感到非常困惑,因为我们定期检查 dev 的更改并将它们合并到 prod,但 Github 将所有这些差异显示在来自 dev 的拉取请求中尚未合并到prod。因此在我们看来,dev 分支与 prod 分支严重不同步,而实际上,prod 分支已经包含大部分 dev 更改。

注意到 git CLI 反映了预期的变化:在命令行上比较两个分支时,我看到 devprod间的奇偶校验。 Github Web UI 似乎遵循自己的逻辑。

解决方法

在从 dev(源分支)到 prod(目标分支)的拉取请求中,或者在 Gitlab 的合并请求中,或者在 Gerrit 的未决更改中(与 2其他),UI 上显示的差异是 git diff prod...dev 的结果。关于git diff prod..dev(相当于git diff prod dev)和git diff prod...dev的区别,请阅读this question

prod...devdevprod 的合并基础与 dev 进行比较。 devprod 的合并基础是 2 个分支的最新共同提交。您可以通过 git merge-base dev prod 获取。合并基可以被认为是 devprod 分支的分叉点,反之亦然。它显示了自 dev 上的分叉点以来已更改的代码。

假设您在提交时从 dev 创建 prod,然后对其进行处理。在您将 dev 合并回 prod 之前,其他开发者可能会不断更新 prod。要查看自分叉点以来您发生了什么变化,git diff prod dev 不是一个好方法。考虑一个边缘情况,其中 prod 已被其他人更新为与您的 dev 完全相同的状态。如果使用 git diff prod dev,则不会打印任何内容,因为它们具有完全相同的代码。说你什么都没做是不公平的。但是,git diff prod...dev 会显示您的作品。

要按预期在 UI 上显示差异,您可以运行 git checkout dev && git pull origin -r prod && git push origin -f devdev 重新定位到最新的 prod。这样,新的合并基础就是 prod。现在 git diff prod...devgit diff prod..dev 具有相同的结果。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...