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

问题描述

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

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

BitBucket 在拉取请求上有一个“恢复”按钮,但我收到了这条消息。

enter image description here

我尝试了“git revert -m 1 commit-hash”并且收到此错误..

enter image description here

如何恢复拉取请求并将存储库“A”恢复到合并发生之前的状态?

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

解决方法

我不知道解决方案会如此简单。我在这里找到的答案 How do I revert a Git repository to a previous commit? 使它只使用两个命令即可工作。历史被保留,repo A 处于合并前的相同状态。添加了新的还原提交。

,

假设您对存储库 A 具有执行此操作的权限,您可以重写其 master 的历史记录并删除所有错误的合并提交

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

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 在远程重新发布它,并确保将其报告给可能检查过旧错误版本的任何人(他们必须删除+创建存储库或分支,或者如果他们实际上已经在它之上完成了一些工作,那么他们可能无论如何都应该删除+创建分支并使用存储或挑选来复制它之上的工作)。>


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

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

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