Wil*_*ill 139 git merge github pull-request
有人接受了他们不应该提出的拉动请求.现在我们已经合并了一堆破碎的代码.你如何撤消拉取请求?我只是要在合并之前将更改还原到提交,但我注意到它在一堆提交中合并.所以现在在合并之前几天就有来自这个人的所有这些提交.你怎么撤消这个?
err*_*per 133
对于这个问题有一个更好的答案,尽管我可以一步一步地解决这个问题.
您需要获取并检查最新的上游更改,例如:
git fetch upstream
git checkout upstream/master -b revert/john/foo_and_bar
Run Code Online (Sandbox Code Playgroud)
看一下提交日志,你应该找到类似的东西:
Run Code Online (Sandbox Code Playgroud)commit b76a5f1f5d3b323679e466a1a1d5f93c8828b269 Merge: 9271e6e a507888 Author: Tim Tom <tim@tom.com> Date: Mon Apr 29 06:12:38 2013 -0700 Merge pull request #123 from john/foo_and_bar Add foo and bar commit a507888e9fcc9e08b658c0b25414d1aeb1eef45e Author: John Doe <john@doe.com> Date: Mon Apr 29 12:13:29 2013 +0000 Add bar commit 470ee0f407198057d5cb1d6427bb8371eab6157e Author: John Doe <john@doe.com> Date: Mon Apr 29 10:29:10 2013 +0000 Add foo
现在,您希望还原整个拉取请求,并具有以后重新发送的功能.为此,您需要获取合并提交的ID .
在上面的例子中,合并提交是最顶层的,它表示"Merged pull request#123 ...".
这样做是为了恢复这两个更改("添加栏"和"添加foo"),最终会在一次提交中恢复整个拉取请求,您可以在以后重新保存,并保持更改历史记录清洁:
git revert -m 1 b76a5f1f5d3b323679e466a1a1d5f93c8828b269
Run Code Online (Sandbox Code Playgroud)
Paŭ*_*ann 85
查看您的提交图(使用gitk或类似程序).您将看到来自pull请求的提交,您将看到自己的提交和合并提交(如果它不是快进合并).您只需在合并之前找到自己的最后一次提交,并将分支重置为此提交.
(如果你有分支的reflog,那么在合并之前找到提交应该更容易.)
(在评论中的更多信息后编辑:)

我假设最后(最右边)提交是你的错误合并拉请求,它合并了这里看到的蓝线.你最后一个好的提交将是黑线前的那个,这里用红色标记:

重置为此提交,你应该没事.
这意味着,在您的本地工作副本中执行此操作(确保您没有更多未提交的内容,例如通过git stash):
git checkout master
git reset --hard 7a62674ba3df0853c63539175197a16122a739ef
gitk
Run Code Online (Sandbox Code Playgroud)
现在确认你真的在我标记的那个提交上,你将看不到它的祖先中的任何东西.
git push -f origin master
Run Code Online (Sandbox Code Playgroud)
(如果您的github遥控器已命名origin- 否则更改名称).
现在一切都应该在github上看起来正确.提交仍然在您的存储库中,但任何分支都无法访问,因此不应该在那里造成任何伤害.(当然,他们仍将在RogerPaladin的存储库中.)
(可能有一个Github特定的网络方式做同样的事情,但我不太熟悉Github及其拉取请求管理系统.)
请注意,如果其他人已经使用错误的提交已经撤消了您的主人,则他们会遇到与您目前相同的问题,并且无法真正回馈.在重置为新的主版本之前.
如果可能发生了这种情况,或者您只是想避免任何问题,请使用git revert命令代替git reset,以使用新提交还原更改,而不是设置回旧更改.(有些人认为你永远不应该使用已发布的分支重置.)请参阅此问题的其他答案,了解如何执行此操作.
为未来:
如果您只想要RogerPaladin分支的一些提交,请考虑使用cherry-pick而不是merge.或者与RogerPaladin通信以将它们移动到单独的分支并发送新的拉取请求.
sam*_*est 33
如果拉力是他做的最后一件事
git reset --hard HEAD~1
Run Code Online (Sandbox Code Playgroud)
要通过您不希望删除的提交撤消github pull请求,您必须运行:
git reset --hard --merge <commit hash>
提交哈希是合并拉取请求的提交.这将从pull请求中删除所有提交,而不会影响历史记录中的任何提交.
找到这个的一个好方法是转到现在关闭的拉取请求并找到这个字段:
运行之后git reset,运行一个:
git push origin --force <branch name>
这应该在pull请求之前恢复分支,而不会影响分支中的任何提交,这些提交会在pull请求的提交之间进行提交.
编辑:
如果要单击拉取请求上的"还原"按钮,则会在分支上创建另一个提交.它不会解散或取消合并.这意味着,如果你点击[还原]按钮,就不能打开新的拉动请求重新添加所有代码.
| 归档时间: |
|
| 查看次数: |
150441 次 |
| 最近记录: |