Github UI 当文件从一个分支签出到另一个分支时,似乎没有跟踪分支之间的差异
Github UI does not seem to track differences between branches when files are checked out from one branch to another
我的场景是这样的:
- 我在 Github.
有一个开发分支 (dev
) 和一个生产分支 (prod
)
- 在我的 CLI 中,我从
prod
分支出来,检查 dev
的一组更改,并将这些更改合并到 prod
(并推送到 Github )
- 在 Github 网络 UI 中,如果我随后以
dev
作为来源创建到 prod
的拉取请求,它不会显示我所做的更改已经从dev
中挑选出来;它似乎遵循 dev
从未与 prod
合并的逻辑,因此忽略了我刚刚从 dev
中挑选出来并与 prod
合并的变更集。
谁能解释一下这背后的逻辑?这对我的团队来说非常混乱,因为我们定期检查 dev
的更改并将它们合并到 prod
,但是 Github 显示所有这些差异尚未合并到来自 dev
到 prod
。所以在我们看来,dev
分支与 prod
分支严重不同步,而实际上,prod
分支已经包含了大部分 dev
更改。
注意到 git CLI 反映了预期的变化:在命令行上比较两个分支时,我看到 dev
和 prod
之间非常接近。 Github 网络 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...dev
将 dev
和 prod
的合并基础与 dev
进行比较。 dev
和 prod
的合并基础是 2 个分支的最新共同提交。你可以通过 git merge-base dev prod
获得它。合并基础可以被认为是 dev
从 prod
分支出来的分叉点,反之亦然。它显示了自 dev
.
上的分叉点以来更改了哪些代码
假设您在提交时从 prod
创建了 dev
并稍后对其进行处理。在您将 dev
合并回 prod
之前,其他开发人员可能会不断更新 prod
。要查看自 fork 点以来您所做的更改,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 dev
将 dev
重新设置为最新的 prod
。这样,新的合并基数正好是prod
。现在 git diff prod...dev
和 git diff prod..dev
有相同的结果。
我的场景是这样的:
- 我在 Github. 有一个开发分支 (
- 在我的 CLI 中,我从
prod
分支出来,检查dev
的一组更改,并将这些更改合并到prod
(并推送到 Github ) - 在 Github 网络 UI 中,如果我随后以
dev
作为来源创建到prod
的拉取请求,它不会显示我所做的更改已经从dev
中挑选出来;它似乎遵循dev
从未与prod
合并的逻辑,因此忽略了我刚刚从dev
中挑选出来并与prod
合并的变更集。
dev
) 和一个生产分支 (prod
)
谁能解释一下这背后的逻辑?这对我的团队来说非常混乱,因为我们定期检查 dev
的更改并将它们合并到 prod
,但是 Github 显示所有这些差异尚未合并到来自 dev
到 prod
。所以在我们看来,dev
分支与 prod
分支严重不同步,而实际上,prod
分支已经包含了大部分 dev
更改。
注意到 git CLI 反映了预期的变化:在命令行上比较两个分支时,我看到 dev
和 prod
之间非常接近。 Github 网络 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...dev
将 dev
和 prod
的合并基础与 dev
进行比较。 dev
和 prod
的合并基础是 2 个分支的最新共同提交。你可以通过 git merge-base dev prod
获得它。合并基础可以被认为是 dev
从 prod
分支出来的分叉点,反之亦然。它显示了自 dev
.
假设您在提交时从 prod
创建了 dev
并稍后对其进行处理。在您将 dev
合并回 prod
之前,其他开发人员可能会不断更新 prod
。要查看自 fork 点以来您所做的更改,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 dev
将 dev
重新设置为最新的 prod
。这样,新的合并基数正好是prod
。现在 git diff prod...dev
和 git diff prod..dev
有相同的结果。