如何删除 Git 中过去的合并历史记录?
How to remove the past merge history in Git?
我在 git 中进行了错误的合并,想从本地和远程存储库中删除有关合并的过去历史记录。
该图显示了分支和提交历史。
此处,prod
分支包含一些特定于分支的信息(例如,db.yml
)。我错误地将 prod
分支合并到 master
。结果,master
的远程存储库现在包含了 C 和 W 之间的所有过去提交。我想要的是保持 master
的历史记录在 [=] 中清除 db.yml
的更改11=]分支。
在上图中,我想要的是删除指示的棕色线,以便 master
分支中 X 之前的提交就 master
分支而言是提交 B,并且master
的远程存储库不应该知道 of prod
分支,它是在提交 B.
之后分支出来的
换句话说,我只想在 master
分支中删除从提交 W 到 X 的合并历史记录(已推送到 master
存储库),同时我想保留提交 C到 prod
分支中的 W(它有一个单独的远程存储库)。在这种情况下,git rebase
中解释的简单策略 past answer like this 似乎效果不佳。或者,有什么办法吗?
我怎样才能做到这一点?
git checkout -B master B # re-hang the `master` label on the commit before the oops
git cherry-pick Y # make the history it should have
git checkout -B prod W # likewise with `prod`: back to before the oops
git merge master # make the history it should have
除非您习惯于执行通常被称为“邪恶合并”的操作,即合并不相关的更改,否则您根本不想保留 X。这是从 prod
到 master
的合并。
git push --force-with-lease origin master # overwrite if nothing's changed since
如果 prod
也住在那里,同样如此。
我在 git 中进行了错误的合并,想从本地和远程存储库中删除有关合并的过去历史记录。 该图显示了分支和提交历史。
此处,prod
分支包含一些特定于分支的信息(例如,db.yml
)。我错误地将 prod
分支合并到 master
。结果,master
的远程存储库现在包含了 C 和 W 之间的所有过去提交。我想要的是保持 master
的历史记录在 [=] 中清除 db.yml
的更改11=]分支。
在上图中,我想要的是删除指示的棕色线,以便 master
分支中 X 之前的提交就 master
分支而言是提交 B,并且master
的远程存储库不应该知道 of prod
分支,它是在提交 B.
换句话说,我只想在 master
分支中删除从提交 W 到 X 的合并历史记录(已推送到 master
存储库),同时我想保留提交 C到 prod
分支中的 W(它有一个单独的远程存储库)。在这种情况下,git rebase
中解释的简单策略 past answer like this 似乎效果不佳。或者,有什么办法吗?
我怎样才能做到这一点?
git checkout -B master B # re-hang the `master` label on the commit before the oops
git cherry-pick Y # make the history it should have
git checkout -B prod W # likewise with `prod`: back to before the oops
git merge master # make the history it should have
除非您习惯于执行通常被称为“邪恶合并”的操作,即合并不相关的更改,否则您根本不想保留 X。这是从 prod
到 master
的合并。
git push --force-with-lease origin master # overwrite if nothing's changed since
如果 prod
也住在那里,同样如此。