git rebase 如何消除已合并到 master 上的先前提交?

How git rebase eliminates previous commits that have been merged onto master?

在我的拉取请求中(将分支 X 合并到 master)我看到提交 A、B 和 C 已经合并到 master。

有人建议我 rebase 分支强制推送。

我做了 git rebase -i HEAD~3 因为第 4 次提交是合并到 master。然后我用 --allow-empty.

推到远程

在我的新 PR(将 X 合并到 master)中,我仍然看到旧的合并提交。

我应该如何变基然后推送到我的分支 X?

谢谢!

插图或一些 git log --decorate --oneline --graph 输出(纯文本)会改进您的问题。我在这里做了一些我认为合理的假设。

您通常不需要使用交互式变基,而您想要的是:

git fetch                   # make sure origin/* are up to date
git checkout X              # get onto your local branch, if needed
git rebase origin/master    # copy the commits, except for the merge

然后你的 git push,假设你的分支 X 在 origin 作为分支 X 也是:

git push --force-with-lease origin X

--force-with-lease 选项在某些非常旧的 Git 版本中不可用;如果你有其中之一,请使用普通 -f,但这会绕过 --force-with-lease 提供的安全检查。