首页 > 解决方案 > 当文件从一个分支检出到另一个分支时,Github UI 似乎没有跟踪分支之间的差异

问题描述

我的情况是这样的:

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

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

注意到 git CLI 反映了预期的变化:我在命令行上比较两个分支时看到了非常接近的奇偶dev性。prodGithub Web UI 似乎遵循了自己的逻辑。

标签: gitgithubbranchdifferencepull-request

解决方案


在从dev(源分支)到prod(目标分支)的拉取请求中,或在 Gitlab 的合并请求中,或在 Gerrit 的待处理更改中(与其他 2 个有点不同),UI 上显示的差异是由于git diff prod...dev. git diff prod..dev关于(相当于git diff prod dev)和之间的区别git diff prod...dev,请阅读此问题

prod...dev比较 和 的dev合并prod基数devdev和的合并基础prod是 2 个分支的最新共同提交。你可以得到它git merge-base dev prod。合并基础可以被认为dev是分支的分支点,prod反之亦然。它显示了自 fork point on 以来更改了哪些代码dev

假设您在提交时创建devprod稍后处理它。在你合并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 dev以重新定位dev到最新的prod. 这样,新的合并基础就是prod. 而现在git diff prod...devgit diff prod..dev得到了同样的结果。


推荐阅读