GitHub pull request 显示已经在目标分支中的提交
GitHub的pull request功能是开发团队协作开发的重要工具。然而,在某些情况下,当我们进行pull request时,我们会发现显示的提交和差异与我们预期的不符。特别是在目标分支有新提交时,已经合并的提交可能仍然在pull request中显示。
解决方法
这个问题是由于GitHub pull request的工作原理导致的。默认情况下,pull request会显示源分支和目标分支的共同祖先之后的所有变更,在此过程中不会考虑到目标分支上所发生的任何更改。这就是为什么即使在目标分支上进行了合并,pull request仍然显示已经合并的提交的原因。
以下是一些解决该问题的方法。
方法一:使用URL比较链接
您可以通过以下URL链接来显示更新后的变更:
1http://githuburl/org/repo/compare/targetbranch...currentbranch
请根据实际情况替换githuburl
、org
、repo
、targetbranch
和currentbranch
。通过使用这个URL链接,您将看到更新后的变更以及差异。
方法二:修改基准分支
另一种解决方法是通过修改pull request的基准分支来强制更新。您可以通过点击pull request界面上的“Edit”按钮,将基准分支临时修改为其他分支,然后再修改回原来的基准分支。这样做会在pull request中产生一个警告,告诉您可能会导致一些旧的提交被移除,以及旧的评论可能会变得过时。这样修改后,pull request将只显示最新提交的变更。
方法三:定期合并目标分支
为了避免这个问题,您可以定期将目标分支合并到pull request的分支中。通过定期合并目标分支,您将不会遇到任何意外的问题,并且pull request将始终显示最新的变更。
方法四:使用git rebase命令
如果上述方法无法解决问题,您可以尝试使用git rebase命令来重新应用提交。具体步骤如下:
- 更新本地目标分支:
git pull origin targetbranch
- 切换到包含更改的分支:
git checkout currentbranch
- 使用git rebase命令重新应用提交:
git rebase origin/targetbranch
- 用
git push --force targetbranch
命令强制推送更改。
但请小心使用该方法,如果您不确定自己在做什么,建议先创建一个测试分支进行操作,并使用git diff targetbranch
命令确保更改后的分支与预期一致。
方法五:修改git配置
如果您不喜欢手动重复上述操作,可以在您的~/.gitconfig
文件中添加以下配置:
1[rebase]
2 autosquash = true
这将自动执行与使用git rebase
命令相同的操作。
方法六:创建新的pull request
如果上述方法都无法解决问题,您还可以尝试创建一个新的pull request。具体步骤如下:
- 切换到包含更改的分支:
git checkout currentbranch
- 在该分支上创建一个新的分支:
git checkout -b new-branch-name
- 推送新的分支到远程仓库:
git push -u origin new-branch-name
- 然后在GitHub上打开一个新的pull request,并关闭旧的pull request。
方法七:编辑pull request
您还可以通过编辑pull request来解决这个问题。您可以点击GitHub上pull request界面的“Edit”按钮,并将基准分支更改为不同于之前的分支,然后再改回原来的基准分支。这样才能确保pull request正确显示最新的提交变更。
其他注意事项
- 如果您使用的是"合并并压缩(Squash and merge)"选项来合并提交,这可能会导致在GitHub上显示不正确的提交变更。
- GitHub无法判断压缩合并的提交与已存在于目标分支上的提交是否相同,因此会显示额外的差异。
- 更好的解决方案是使用"创建合并提交(Create a merge commit)"选项来合并提交。
总之,GitHub pull request不会自动更新提交历史。解决这个问题的最简单方法是定期合并目标分支或直接使用"创建合并提交"选项。如果仍然出现问题,可以尝试使用其他方法,例如使用具体的URL链接或编辑pull request。
这些方法都可以解决GitHub pull request显示已经在目标分支中的提交的问题。希望本教程对您有所帮助!
相关文章推荐
- 在Git中更改已推送的提交消息(前提是没有人从远程仓库拉取)
- 如何在克隆git仓库时删除已添加到.gitignore的目录
- Github 提示在按照屏幕上的说明进行操作和推送新仓库时要求输入用户名/密码
- 在GitHub上将公共仓库的fork变为私有仓库
- 如何解决Git Push出现"Repository not found"错误
- 从git/GitHub的历史记录中删除文件夹及其内容
- 如何修改一个提交(不改变提交信息)?
- 如何判断存储项是否存在于GitHub远程仓库?
- 在Git中合并多个提交后再推送
- 使用Git,显示在一个分支中但不在其他分支中的所有提交
- 将composer.lock提交至版本控制吗?
- 如何在 Git 仓库中保留文件但不跟踪其变化
- 撤销Git中的stash操作
- Git中从存储区(stash)中提取单个文件(或文件的更改)
- 如何从Git仓库中删除.DS_Store文件
- 使用Git递归更新子模块
- 在.gitignore 文件中可以使用注释