繁体   English   中英

如何恢复合并到我分叉的仓库的拉取请求,而不是合并到我的该仓库副本

[英]How to revert a pull request that was merged to repo I forked from, instead being merged to my copy of that repo

我从回购“A”分叉。 将我的回购命名为“B”。 在本地拉下来。 做出改变,承诺,推动。 创建的拉取请求的目标是仅合并到仓库“B”的原点/主库,但由于它是一个分叉的仓库,BitBucket 的默认设置将它合并到我从中分叉的仓库“A”。

所以现在,回购“A”的主人有我的变化,不应该在那里。 他们应该最终成为我的“B”回购的主人。

BitBucket 在拉取请求上有一个“恢复”按钮,但我收到了这条消息。 在此处输入图片说明

我试过“git revert -m 1 commit-hash”并收到这个错误.. 在此处输入图片说明

如何恢复该拉取请求并将 repo "A" 恢复到合并发生之前的状态?

我看了很多答案,但没有类似的情况。

我不知道解决方案会如此简单。 我在此处找到的答案如何将 Git 存储库恢复到以前的提交? 使其仅使用两个命令即可工作。 历史被保留,repo A 处于合并前的相同状态。 添加了一个新的还原提交。

假设您对 repo A 有权限这样做,您可以重写其master的历史记录并删除所有错误的合并提交

例如,如果存储库 A 在 commit1 之前有一个干净的历史记录,那么 PR 被合并,因此历史记录的其余部分包含来自该错误 PR 的提交,但也包含来自其他 PR 的“良好”提交,然后在该 repo 中:

git checkout master && git pull      # be sure to work with the latest
git rebase -i commit1

这将打开您最喜欢的编辑器,每行显示一个提交。 删除与“坏”提交(包括来自该 PR 的任何合并提交)相对应的所有行,并保留“好”提交。 保存并退出。

如果发生冲突(有人根据该 PR 的某些内容进行工作),您需要手动修复它,然后git rebase --continue

完成 rebase 后,您的分支历史记录就干净了,就好像 PR 从未合并过一样。 但是,在这里您需要获得许可才能执行此操作,您需要使用git push -f origin master在远程重新发布它,并确保将其报告给任何可能检查过旧错误版本的人(他们会删除+创建存储库或分支,或者如果他们实际上已经在它之上做了一些工作,他们可能无论如何都应该删除+创建分支并使用stash或cherry-pick来重现它之上的工作)。


如果没有“好”提交与“坏”提交混合在一起,那么解决方案就简单得多。 例如,如果存储库 A 在 commit1 之前有一个干净的历史记录,然后其他所有内容都是“错误的”,您可以将分支重置为最后一次好的提交:

git checkout master && git pull
git reset --hard commit1
git push -f origin master

同样,您需要分支master写权限,并警告任何可能基于它的工作的人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM