![](/img/trans.png)
[英]How to pull changes from external repo that was merged into our own repo
[英]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.