我合并不好,后面又做了几次不错的提交。我试图还原错误的合并,但是我不想放弃这些更改(即,我不希望进一步提交,撤消更改),我只是不希望它们出现在我的分支中。
所以我的日志看起来像这样:
7975c057 | Reverts bad merge
40a01d2f | Good commit
3b2c3825 | Good commit
1f3f1858 | Bad merge - code shouldnt be in this branch
37f71a89 | Good commit
... (more good commits...)
如何从分支中删除1f3f1858 | Bad merge
和7975c057 | Reverts bad merge
?
答案 0 :(得分:1)
还原合并提交非常棘手,因为合并有两个父对象,并且只能遵循一个父对象的路径。如果使用交互式变基,则通常必须完全重做合并。因此,我可能会建议以下策略:
git checkout -b good_branch 37f71a89 # create new branch from 37f71a89
git cherry-pick 3b2c3825 # cherry-pick first good commit
git cherry-pick 40a01d2f # cherry-pick second good commit
这将使您拥有所需的分支结构,尽管两个“良好”提交实际上会具有新的SHA-1哈希值,因为Cherry-picking总是创建一个 new 提交(尽管提交的功能将与原始提交相同。