有人接受了他们不该接受的请求。现在我们合并了一堆破碎的代码。如何撤销拉请求?我只是打算在合并之前将更改恢复到提交,但我注意到它合并了一堆提交。这是这个人在合并前提交的所有文件。你该怎么做呢?
当前回答
如果拉人是他做的最后一件事
git reset --hard HEAD~1
其他回答
从2014年6月24日开始,您可以尝试轻松取消PR(参见“恢复拉请求”):
介绍恢复按钮
你可以通过单击revert在GitHub上轻松恢复拉请求:
系统会提示你创建一个新的pull请求,并将更改还原:
它仍然有待测试,如果恢复使用-m或不(用于恢复合并)
但阿迪勒·H·拉扎在评论中补充道(2019年12月):
这是预期的行为,它创建了一个新分支,您可以从这个新分支创建一个PR到您的master。 这样在未来你可以取消恢复,如果需要,这是最安全的选择,而不是直接改变你的主。
警告:Korayem在评论中指出:
在恢复之后,假设您对Git分支做了一些进一步的更改,并从相同的源/目标分支创建了一个新的PR。 你会发现PR只显示了新的更改,而没有显示还原之前的内容。
Korayem让我们参考“Github:在恢复后忽略更改(git cherry-pick, git rebase)”了解更多信息。
另外:
用于恢复拉取请求的API(2023年1月) 现在可以使用GraphQL突变来恢复合并的拉请求:revertPullRequest。 与web中拉请求页面上的恢复操作一样,调用此API创建一个新的拉请求,该请求将反转合并的拉请求所做的更改。 了解有关恢复拉取请求的详细信息。
如果您给出以下命令,您将得到包括提交、合并在内的活动列表。
git 引用日志
你的最后一次提交应该是在'HEAD@{0}'。你可以同样检查你的提交信息。 要到达那个点,使用命令
git重置—hard 'HEAD@{0}'
您的合并将被恢复。如果您有新的文件,请丢弃合并中的更改。
如果你想撤销拉请求,我们可以遵循这些 步骤,
活动列表全部拉请求
git reflog
运行上述命令后,将出现此输出。
执行reset命令-
git reset --hard 6954dff92
其中6954dff92合并id,以及基于合并id更新的代码。
谢谢,希望能对大家有所帮助,请大家喜欢和支持。
查看您的提交图(使用gitk或类似的程序)。您将看到来自pull请求的提交,您将看到自己的提交,以及一个合并提交(如果不是快进合并的话)。您只需要在合并之前找到您自己的最后一次提交,并将分支重置为此提交。
(如果你有分支的reflog,在合并之前找到提交应该会更容易。)
(更多信息请在评论中编辑:)
好的,让我们看一下图表:
我假设最后一次(最右边)提交是您错误的merge by pull请求,它合并了这里所见的蓝线。 你最后一次好的提交将是之前黑线上的那个,这里用红色标记:
重置为此提交,应该没问题。
这意味着,在你的本地工作副本中这样做(在确保你没有更多未提交的东西之后,例如通过git stash):
git checkout master
git reset --hard 7a62674ba3df0853c63539175197a16122a739ef
gitk
现在确认您确实是在我标记的提交上,您将不会在其祖先中看到任何被拉的东西。
git push -f origin master
(如果你的github远程命名为origin -否则更改名称)。
现在在github上一切看起来都是正确的。提交仍然在存储库中,但不能被任何分支访问,因此不应该在那里造成任何损害。(当然,它们仍然会在RogerPaladin的存储库中。)
(可能有一个特定于Github的web方式来做同样的事情,但我不太熟悉Github和它的拉请求管理系统。)
请注意,如果其他人已经用错误的提交拉了你的master,那么他们就会有和你目前一样的问题,并且不能真正地做出贡献。在重新设置到新的主版本之前。
如果很可能发生这种情况,或者你只是想避免任何问题,使用git revert命令而不是git reset,用一个新的提交来恢复更改,而不是设置回旧的。(有些人认为你永远不应该对发布的分支进行重置。)关于如何做到这一点,请参阅此问题的其他答案。
未来:
如果您只想要RogerPaladin分支的一些提交,可以考虑使用樱桃选择而不是合并。或者与RogerPaladin通信,将它们移动到一个单独的分支,并发送一个新的拉请求。
如果拉人是他做的最后一件事
git reset --hard HEAD~1
推荐文章
- 防止在GitHub上推送到master ?
- 我如何在github上引用特定问题的评论?
- 根据Git,谁是“我们”,谁是“他们”?
- git如何合并后樱桃采摘工作?
- Git搜索单个文件历史记录中的字符串
- Git命令显示所有(轻量级)标签创建日期
- 我如何才能看到我在Github上看到的所有问题?
- Gitignore并没有忽视文件夹
- 什么时候用。git/info/exclude代替。gitignore来排除文件?
- 如何告诉git忽略个别行,即gitignore为特定行代码
- 在GitHub上链接到其他Wiki页面?
- “git diff——耐心”是什么意思?
- 你如何跟踪你对GitHub问题的评论?
- 我如何在GitHub中为其他人的代码做出贡献?
- 签出旧的提交并使其成为新的提交