我试图在GitHub上审查一个拉请求到一个不是主的分支。目标分支在master后面,拉请求显示了来自master的提交,所以我合并了master并将其推送到GitHub,但刷新后,他们的提交和差异仍然出现在拉请求中。我已经再次检查了GitHub上的分支是否有来自master的提交。为什么它们仍然出现在拉请求中?

我还检查了本地拉请求,它只显示未合并的提交。


当前回答

解决这个问题的一种方法是git在PR中rebase targetbranch。然后git push -force targetbranch,然后Github会显示正确的提交和diff。如果你不知道你在做什么,请小心使用这个。也许先签出一个测试分支来做rebase,然后git diff targetbranch以确保它仍然是你想要的。

其他回答

解决这个问题的一种方法是git在PR中rebase targetbranch。然后git push -force targetbranch,然后Github会显示正确的提交和diff。如果你不知道你在做什么,请小心使用这个。也许先签出一个测试分支来做rebase,然后git diff targetbranch以确保它仍然是你想要的。

综上所述,GitHub不会在拉请求中自动调整提交历史。最简单的解决方案是:

解决方案1:调整基数

假设你想从feature-01合并到master:

git fetch origin
git checkout feature-01
git rebase origin/master
git push --force-with-lease

如果你在一个分叉上工作,那么你可能需要用上游替换上面的原点。参见如何更新GitHub分叉存储库?了解有关跟踪原始存储库的远程分支的更多信息。

解决方案2:创建一个新的拉请求

假设你想从feature-01中合并介绍master:

git checkout feature-01
git checkout -b feature-01-rebased
git push -u origin feature-01-rebased

现在打开一个基于feature-01-re - based的拉请求,并关闭feature-01的拉请求。

一旦我在开始新的改变或创建PR之前开始做以下事情,这个问题就不会发生在我身上。

git pull --rebase origin <target-branch>

这基本上确保了从本地添加的任何新更改都堆叠在当前远程分支中的内容之上。因此,我们的本地分支总是在当前远程头的顶部,只有新的提交在PR中。

您需要在~/中添加以下内容。gitconfig文件:

[rebase]
    autosquash = true

这将自动实现与此答案所显示的相同的结果。

接下来我来处理。

我做了什么,为什么会这样?

没有一个解决方案对我有效。当我用两个点,即。。而不是……GH的差异更接近我所改变的。但这还不是我全部的改变。

这是因为GitHub显示压缩合并更改的方式存在问题。最好的解释在这里

它基本上发生在以下情况:

推送featureBranch的变化 挤压合并到主 在本地,当我仍然在featureBranch上时,我将它与main合并。做更多的修改,再把它推上去。 但后来在GitHub上,我看到了比我预期的更多的变化。

值得注意的是,这不是git的问题。相反,这是一个GitHub问题。GitHub无法判断压缩提交与非压缩提交的总和相同,从而导致额外的差异。


解决方案

在本地main上,撤消并保存所有未与main合并的更改。我做到了。例如,如果我有4个提交,不在我的PR得到壁球合并,那么我会这样做:

git重置头~4 Git保存“最近4次提交”

然后用刚才存储的内容创建一个新分支。步骤:

Git checkout main git checkout -b newBranch Git stash应用 Git add—all Git commit -m "some message" git推