我当时正在处理一个开源项目的 pull 请求,但我不小心将更改提交到了本地 master
分支。我没有认真考虑,就直接将其推送到我的原点,并将我的主分支作为 PR 提交。然后我后来将上游 master pull 到我的 master 中,这样我就可以修复 merge 冲突以使我的 PR 保持最新。从那时起,更多的提交已经提交到上游。
所以现在我有:
upstream master: A - B - C ... H - I - J
my fork master: A - B - X - Y
其中 X 是我的 PR 的第一个版本,Y 是 C-H 到 X 的 merge 。
所以现在我的 fork 陷入了困惑。如果不在 B 之前启动一个分支,然后每次将上游 master pull 入该分支,我就无法处理不相关的 PR。如果我原来的 PR 被拒绝或者需要一年的时间才能得到反馈,我将无限期地陷入这种状态。
有什么办法可以解决这个问题吗?我是否必须取消我的 PR 以及我的 X 和 Y 提交并手动重做它们(如果是这样,如何)?或者我可以以某种方式挽救我的 PR 并使我的主分支恢复与上游同步吗?
最佳答案
在这种情况下我会做的事情看起来有点像这样:
首先,从现有的 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
然后挑选 X
和 Y
到它上面:
git cherry-pick X Y # Replace with the appropriate commit IDs
然后将此分支推送到您的分支,取消现有 PR,并针对 upstream-with-commits
打开一个新分支。要使您的 fork 的 master
恢复正常,请执行以下操作:
git checkout master
git push -f origin HEAD
git push -f
将强制推送,并覆盖 origin/master
中的任何历史记录。请注意,如果其他人从您的 fork 中克隆,可能会给他们带来问题。
哦,别忘了删除master-preserve
:
git branch -D master-preserve
一旦您从中进行了挑选
,就不再需要它了。
关于git - 修复 fork 中损坏的主分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39049785/