lob*_*ati 99 git merge commit github pull-request
我正在尝试将GitHub上的拉取请求检查到非主的分支.目标分支在master之后,pull请求显示master的提交,所以我合并master并将其推送到GitHub,但是它们的提交和差异仍然在刷新后出现在pull请求中.我加倍检查GitHub上的分支是否有来自master的提交.为什么他们仍然出现在拉动请求中?
我还在本地检查了pull请求,它只显示了未合并的提交.
Ada*_*hip 82
看起来Pull Request没有跟踪目标分支的变化(我联系了GitHub支持,并于2014年11月18日收到回复,说明这是设计的).
但是,您可以通过执行以下操作让它向您显示更新的更改:
http://githuburl/org/repo/compare/targetbranch...currentbranch
Run Code Online (Sandbox Code Playgroud)
更换githuburl,org,repo,targetbranch,和currentbranch需要.
或者正如在他的回答中指出的hexsprite,您也可以通过单击EditPR并临时将基数更改为其他分支并再次返回来强制更新.这会产生警告:
你确定要改变基数吗?
旧基础分支的某些提交可能会从时间线中删除,旧的审核评论可能会过时.
并将在PR中留下两个日志条目:
hex*_*ite 53
这是一个很好的解决方法.Edit在GitHub中查看PR时使用按钮将基本分支更改为其他内容master.然后将其切换回master,现在它将正确显示最近提交的更改.
Mat*_*ski 23
总而言之,GitHub不会在拉取请求中自动重新设置提交历史记录.最简单的解决方案是:
假设你要合并到master来自feature-01:
git fetch origin
git checkout feature-01
git rebase origin/master
git push --force
Run Code Online (Sandbox Code Playgroud)
如果你正在使用fork,那么你可能需要替换origin上面的upstream.请参阅如何更新GitHub分叉存储库?了解有关跟踪原始存储库的远程分支的更多信息.
假设你要合并的前奏master,从feature-01:
git checkout feature-01
git checkout -b feature-01-rebased
git push -u origin feature-01-rebased
Run Code Online (Sandbox Code Playgroud)
现在打开一个拉取请求feature-01-rebased并关闭一个feature-01.
Eli*_*ynn 13
解决这个问题的一种方法是git rebase targetbranch在PR中.然后git push --force targetbranch,Github将显示正确的提交和差异.如果你不知道自己在做什么,请小心.也许首先检查一个测试分支,然后git diff targetbranch确定它仍然是你想要的.
Dav*_*ess 11
对于遇到这种并且被GitHub Pull Request行为混淆的其他人来说,根本原因是PR是源分支提示与源分支和目标分支的共同祖先的差异.因此,它将显示源分支上的所有更改,直到共同的祖先,并且不会考虑目标分支上可能发生的任何更改.
有关更多信息,请访问:https://developer.atlassian.com/blog/2015/01/a-better-pull-request/
基于共同祖先的差异似乎很危险.我希望GitHub可以选择制作更标准的3路合并PR.
Ele*_*ena 10
您需要将以下内容添加到您的~/.gitconfig文件中:
[rebase]
autosquash = true
Run Code Online (Sandbox Code Playgroud)
这将自动实现与此答案显示的相同.
我从这里得到了这个.
这些解决方案都不适合我。当我使用两个点ie..而不是...GH 上的差异时,它更接近我更改的内容。但仍然不完全是我的所有改变。
发生这种情况是因为 GitHub 显示合并更改的方式存在问题。最好的解释在这里
如果出现以下情况,基本上就会发生:
featureBranchmainfeatureBranch我将其与main. 进行更多更改并再次将其推高。值得注意的是,这不是 git 问题。相反,这是一个 GitHub 问题。GitHub无法判断压缩的提交与非压缩提交的总和相同,并导致额外的差异。
在本地 main 上,撤消并存储尚未与 main 合并的所有更改。为了做到这一点,我做到了。例如,如果我有 4 个不在我的 PR 中的提交被合并了,那么我会这样做:
git reset HEAD~4git stash save "last 4 commits"然后用您刚刚隐藏的内容创建一个新分支。脚步:
git checkout maingit checkout -b newBranchgit stash applygit add --allgit commit -m "some message"git push当您从目标分支合并提交时,在GitHub上会发生这种情况。
我一直在使用壁球并与Github合并作为默认合并策略,包括来自目标分支的合并。这引入了一个新的提交,并且GitHub无法识别该压缩的提交与已经在master中的提交相同(但是具有不同的哈希值)。Git可以正确处理它,但是您会在GitHub上再次看到所有更改,这很烦人。解决方案是对这些拉入的上游提交进行定期合并,而不是压缩合并。当您想将另一个分支作为一个依赖项合并到您的分支中,git merge --squash并且在该分支实际成为master分支之后,在从master撤回之前还原该单个提交。
使用 2-dot url 代替 3-dot url 进行比较
代替
http://githuburl/org/repo/compare/targetbranch...currentbranch
Run Code Online (Sandbox Code Playgroud)
用
http://githuburl/org/repo/compare/targetbranch..currentbranch
Run Code Online (Sandbox Code Playgroud)
当 PR 通过选项合并时会发生这种情况Squash and merge。如果您希望旧的提交不显示在以下 PR 中,则只需将 PR 与Create a merge commit选项合并即可。
注意: 完成此操作后,下一个 PR 始终会显示自己的提交,而不是旧的提交,因为旧的 PR 已通过Create a merge commit选项添加到基础分支中。
技术说明: merge --squash 和 rebase 有什么区别?
| 归档时间: |
|
| 查看次数: |
45307 次 |
| 最近记录: |