在fork中修复受损的主分支

时间:2016-08-20 02:05:11

标签: git github

我正在处理一个开源项目的拉取请求,但我不小心将我的更改提交到我的本地master分支。在没有考虑到它的情况下,我只是继续把它推到我的起源并提交我的主分支作为公关。然后我将上游主人拉到我的主人那里,这样我就可以修复合并冲突,让我的PR保持最新状态。从那以后,对上游做了更多的提交。

所以现在我有:

upstream master: A - B - C ... H - I - J

my fork master:  A - B - X - Y

其中X是我的PR的第一个版本,Y是C-H到X的合并。

所以现在我的叉子很纠结。如果没有在B之前启动分支,然后每次都将上游主服务器拉入该分支,我就无法处理不相关的PR。如果我的原始PR被拒绝或需要一年的时间来获得反馈,我将无限期地陷入这种状态。

有没有解决此问题的方法?我是否必须核对我的PR以及我的X和Y提交并手动重做(如果是,如何)?或者我可以以某种方式挽救我的PR并让我的主分支与上游同步回来吗?

1 个答案:

答案 0 :(得分:2)

在这种情况下我会做的事情看起来有点像这样:

首先,查看现有master的新分支:

git checkout -b master-preserve

然后,将master重置为upstream/master

git checkout master
git fetch upstream
git reset --hard upstream/master

现在,创建另一个分支:

git checkout -b upstream-with-commits

樱桃挑选XY到它上面:

git cherry-pick X Y # Replace with the appropriate commit IDs

然后将此分支推送到您的分支,核对现有的PR,并针对upstream-with-commits打开一个新的分支。为了使你的前叉master按顺序恢复,请执行:

git checkout master
git push -f origin HEAD

git push -f会强制推送,并覆盖origin/master中的所有历史记录。请注意,如果其他人从您的分叉克隆,可能会给他们带来麻烦。

哦,不要忘记删除master-preserve

git branch -D master-preserve

一旦你cherry-pick编辑了它,就不再需要了。