git - 修复 fork 中损坏的主分支

标签 git github

我当时正在处理一个开源项目的 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

然后挑选 XY 到它上面:

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/

相关文章:

git-amend - git commit --amend 后出现 Git not-fast-forward 错误

git - 是否可以发送多个 pull 请求来 pull github 提交?

eclipse - 如何在 Eclipse Luna 4.4 中为登台 View 选择存储库?

git - git 中的自定义行结尾(LF 和 CR+LF 除外)

Git 提交显示在日志中但不在 Github 中

git - 使用 "fixup!"或 "squash!"之间有什么真正的区别吗?

git - 如何授予机器对特定 GitHub 存储库的完全访问权限?

github - 我想轻松推送git

Git:删除子模块错误

git - 根据 git status 为 SublimeText TreeView 中的文件着色?