我试图在GitHub上审查一个拉请求到一个不是主的分支。目标分支在master后面,拉请求显示了来自master的提交,所以我合并了master并将其推送到GitHub,但刷新后,他们的提交和差异仍然出现在拉请求中。我已经再次检查了GitHub上的分支是否有来自master的提交。为什么它们仍然出现在拉请求中?
我还检查了本地拉请求,它只显示未合并的提交。
我试图在GitHub上审查一个拉请求到一个不是主的分支。目标分支在master后面,拉请求显示了来自master的提交,所以我合并了master并将其推送到GitHub,但刷新后,他们的提交和差异仍然出现在拉请求中。我已经再次检查了GitHub上的分支是否有来自master的提交。为什么它们仍然出现在拉请求中?
我还检查了本地拉请求,它只显示未合并的提交。
当前回答
我找到了一种方法来获得正确的行为(在2020年11月测试)。
git合并和解决冲突后,需要使用git merge——continue而不是git commit ....
其他回答
我不太确定这背后的理论。但我得到了这个几次,并能够通过做下面的事情来解决这个问题。
git pull --rebase
这将从您的原始回购主分支获取并合并更改(如果您有指向)
然后你把你的更改强行推到你的github克隆库(目标)
git push -f origin master
这将确保你的github克隆和你的父repo在相同的github提交级别,你不会看到跨分支的任何不必要的更改。
解决这个问题的一种方法是git在PR中rebase targetbranch。然后git push -force targetbranch,然后Github会显示正确的提交和diff。如果你不知道你在做什么,请小心使用这个。也许先签出一个测试分支来做rebase,然后git diff targetbranch以确保它仍然是你想要的。
我找到了一种方法来获得正确的行为(在2020年11月测试)。
git合并和解决冲突后,需要使用git merge——continue而不是git commit ....
综上所述,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的拉请求。
这发生在PRs被压缩和合并选项合并时。如果您希望旧的提交不显示在下面的pr中,那么只需使用创建合并提交选项合并这些pr。
创建合并提交 压缩和合并 重组和合并
注意:一旦完成,下一个pr总是显示他们自己的提交,而不是旧的,因为旧的已经通过创建合并提交选项添加到基础分支。
技术解释:merge -squash和rebase之间的区别是什么?