使用 git rebase 意外地将其他人的提交添加到我的 PR

E.A*_*ood 9 git github

我打算在一个功能上做更多的工作,在编码之前我跑了git pull --rebase upstream master。然后跑了git push origin feature-branch; 这导致了我随后运行的那些“快进”错误之一git pull origin feature-branch。之后,我修复了合并冲突并git push origin feature-branch再次运行。现在我的 pr from feature-branchtomaster被其他人的提交污染了。我注意到以前有人问过这个问题,但从未回答过

有人可以解释我做错了什么,也许如何解决它?

E.A*_*ood 13

我想到了:

记下您要保存的 PR 中所有提交的 git commit 哈希(即您的提交)。

然后运行以下命令:

git fetch upstream
git reset --hard upstream/master
git cherry-pick <hash 1>
git cherry-pick <hash 2>
// cherry-pick all of your commits then:
git push -f origin your-branch
Run Code Online (Sandbox Code Playgroud)

它应该自动修复你的 PR

  • 是否应该按照从最旧到最新提交的顺序运行cherry-pick 命令? (2认同)

Ror*_*ane 5

如果您当前的分支有您想要保留(您自己的)的提交与您不想要的提交(由变基添加的提交)混合在一起,您可以使用git rebase --interactive再次编辑您的分支并仅保留您选择的提交。

首先,找到您可能要编辑的最后一个提交之前的提交的哈希值。如果您的分支最初是基于的master,则可以选择返回的一个好的提交git merge-base HEAD master

接下来,启动从当前提交到旧提交的交互式变基:

git rebase --interactive f1c3d284
Run Code Online (Sandbox Code Playgroud)

您的文本编辑器将弹出代表分支中每个提交的行,并在其下方显示来自 Git 的说明。正如说明所述,将代表您不想要的提交的每一行更改pick为。drop当您保存并关闭文档时,将根据这些说明重建当前分支。