GIT - 撤消特定的过去合并,但需要在合并后提交的提交完好无损

时间:2016-06-29 07:19:54

标签: git version-control rebase git-revert git-cherry-pick

我同时在功能分支和分支上工作。

几天前,我将功能合并到 Master 中。在此之上也做了一些提交。

但后来我意识到这个功能不再需要了。所以我需要删除由于 Feature 分支而引入的提交。

在检查时,我意识到我有3个选项 Rebase Revert Cherry-pick

我将来可能需要功能分支的提交。因此,如果我将来需要它们,它的提交需要在提交历史记录/ git日志等中可见。因此,我很困惑上面三个选择哪个选项。

注意:所有提交都被推送到master。那么这对我选择的选项有什么影响吗?

1 个答案:

答案 0 :(得分:2)

由于您的分支已经发布,您可能希望避免使用交互式rebase作为解决方案。交互式rebase允许您逐字地从Feature中删除您不想要的Master提交。但这会以重写Master的历史为代价,这会产生负面影响。

我认为最适合您的方法是git revert您不想要的Feature次提交。

使用:

git revert <SHA-1>

其中<SHA-1&gt;是您想要还原的提交。如果您按顺序进行了一系列提交,则可以使用:

git revert --no-edit <SHA-1>..<SHA-1>

使用两个提交范围。

您无法在历史记录中提交以供日后使用。提交都在那里,或者它们不存在。

如果你想稍后恢复提交,你可以合并或者挑选它们,或者你也可以还原恢复提交(@ 1615903)。