回滚先前的提交,但仍保留历史记录

时间:2013-05-06 15:02:40

标签: git git-rebase

我在git中有以下历史记录

A-B-C-D-E-F

我想回滚我在提交E中所做的更改,但是希望我提交F中的更改。所以我做了git rebase这样的

git rebase -i D

并且只选择提交F并忽略提交E.我的历史现在看起来像

A-B-C-D-F

但是,我想要做的是,回滚在提交E中完成的更改,但仍然保留在历史记录中添加E然后删除。像这样的东西

A-B-C-D-E-F-E1

其中E1是一个提交,用于恢复提交E所做的更改。

如何在git中执行此操作?

3 个答案:

答案 0 :(得分:4)

git revert $SHA_FOR_E将使新提交“与提交E相反。

From the man page

  

给定一个或多个现有提交,还原相关修补程序引入的更改,并记录一些记录它们的新提交。

答案 1 :(得分:2)

您使用revert command。这会创建一个提交,它与提供的SHA相反。

git revert <SHA E>

答案 2 :(得分:2)

我认为rebase不是最佳选择。我的第一个建议是使用revert

git revert E

这将创建一个新的提交,恢复E已应用

另一种选择是反转补丁。

git show E | patch -R -p1 && git commit .

将取消E中的内容。