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
提供的安全检查。
在我的拉取请求中(将分支 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
提供的安全检查。