我正在尝试查看GitHub上对非主分支的请求请求。目标分支位于master后面,并且pull请求显示来自master的提交,因此我合并了master并将其推送到GitHub,但是刷新后它们的提交和diff仍然出现在pull请求中。我已经仔细检查了GitHub上的分支是否具有master的提交。为什么它们仍出现在拉取请求中?
我还在本地签出了pull请求,它只显示未合并的提交。
我正在尝试查看GitHub上对非主分支的请求请求。目标分支位于master后面,并且pull请求显示来自master的提交,因此我合并了master并将其推送到GitHub,但是刷新后它们的提交和diff仍然出现在pull请求中。我已经仔细检查了GitHub上的分支是否具有master的提交。为什么它们仍出现在拉取请求中?
我还在本地签出了pull请求,它只显示未合并的提交。
Answers:
看起来,“拉取请求”无法跟踪目标分支的更改(我联系了GitHub支持,并于2014年11月18日收到了回复,指出这是设计使然)。
但是,您可以通过执行以下操作来显示更新的更改:
http://githuburl/org/repo/compare/targetbranch...currentbranch
更换githuburl
,org
,repo
,targetbranch
,和currentbranch
需要。
或者,正如hexsprite在他的答案中指出的那样,您也可以通过单击EditPR并将其临时更改为另一个分支,然后再次返回来强制更新它。这将产生警告:
您确定要更改基准吗?
来自旧基础分支的某些提交可能会从时间轴中删除,并且旧的评论可能会过时。
并将在PR中保留两个日志条目:
这是一个很好的解决方法。Edit
在GitHub中查看PR时,请使用按钮将基本分支更改为master
。然后将其切换回master
,它现在将正确地仅显示最新提交的更改。
综上所述,GitHub不会在拉取请求中自动将提交历史记录作为基准。最简单的解决方案是:
假设你要合并到master
来自feature-01
:
git fetch origin
git checkout feature-01
git rebase origin/master
git push --force
如果您使用的是叉子,则可能需要用替换origin
以上内容upstream
。请参阅如何更新GitHub分叉存储库?了解有关跟踪原始存储库的远程分支的更多信息。
假设您要合并master
来自的简介feature-01
:
git checkout feature-01
git checkout -b feature-01-rebased
git push -u origin feature-01-rebased
现在打开的拉取请求,feature-01-rebased
并关闭的拉取请求feature-01
。
对于遇到此问题并被GitHub Pull Request行为所迷惑的其他人,根本原因是PR是源分支提示与源分支和目标分支的共同祖先的区别。因此,它将显示源分支上直到公共祖先的所有更改,并且不会考虑目标分支上可能发生的任何更改。
此处提供更多信息: https //developer.atlassian.com/blog/2015/01/a-better-pull-request/
基于祖先的常见差异似乎很危险。我希望GitHub可以选择制作更标准的基于3合并的PR。
当您从目标分支合并提交时,在GitHub上会发生这种情况。
我一直在使用壁球并将Github合并为默认合并策略,包括来自目标分支的合并。这引入了一个新的提交,并且GitHub无法识别此压缩的提交与已经在master中的提交相同(但是具有不同的哈希值)。Git可以正确处理它,但是您会在GitHub上再次看到所有更改,因此很烦人。解决方案是对这些拉入的上游提交进行定期合并,而不是压缩合并。当您想将另一个分支作为一个依赖项合并到您的分支中,git merge --squash
并在该分支实际成为master分支之后,再从master撤回该单个提交。
编辑:另一个解决方案是变基并强制推送。干净但改写的历史记录
我不确定这背后的理论。但是我得到了好几次,并能够通过以下操作解决此问题。
git pull --rebase
这将从原始repo master分支中获取并合并更改(如果您有指向的话)
然后,将更改强行推送到github克隆的存储库(目标)
git push -f origin master
这将确保您的github克隆和您的父仓库位于同一github提交级别,并且您不会在分支之间看到任何不必要的更改。
依次尝试以下命令。
git pull "latest
git reset --hard master
如果您太担心将事情搞砸了,请采用失败安全方法:转到文件并手动删除更改,然后使用来压缩最后一次提交
git add . && git commit -a --allow-empty-message -m '' && git reset --soft HEAD~2 &&
git commit --edit -m"$(git log --format=%B --reverse HEAD..HEAD@{1})"
我没有冲突,你很好!