撤消一些合并/提交,但保留一些

时间:2019-07-04 13:25:19

标签: git git-revert git-cherry-pick

我合并不好,后面又做了几次不错的提交。我试图还原错误的合并,但是我不想放弃这些更改(即,我不希望进一步提交,撤消更改),我只是不希望它们出现在我的分支中。

所以我的日志看起来像这样:

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 merge7975c057 | Reverts bad merge

1 个答案:

答案 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 提交(尽管提交的功能将与原始提交相同。