撤消或删除先前Git提交的更改

时间:2015-10-13 14:08:07

标签: git git-revert git-rewrite-history

假设我有一个提交列表: A > B > C > D > E,如何从历史记录中删除C中所做的更改,以获得A > B > D > E

3 个答案:

答案 0 :(得分:5)

您始终可以还原更改。

git revert C

如果您想重写历史记录,这就是rebase的用途。你需要:

git rebase -i A

然后从提交列表中删除C.

更长的解释:

第一个选项通过创建与原始提交相反的新提交来恢复更改。因此存储库看起来像:

A> B> C> D> E> C`

其中C`与C相反。基本上与patch --reverse

相同

第二个选项会更改历史记录。 rebase允许您选择特定提交,更改提交顺序等等。我建议阅读git-rebase-i标志用于交互模式,允许用户在变基之前编辑提交列表。

如果从提交列表中删除C并执行rebase,则实际输出将为

A> B> D> ë

您在分支中不再有C历史记录。

注意:在这两种情况下,您可能会在此过程中发生冲突。 在第一种情况下,因为你在C上应用C`,在第二种情况下,因为你在D上应用D。

答案 1 :(得分:2)

尝试git revert C

...最好也阅读man git-revert

答案 2 :(得分:2)

您不能这样做 获取A > B > D > E。 您将始终以A > B > D' > E'

结束

要删除C中引入的更改,您可以使用

git rebase --onto <newbase> <oldbase> <commit/branch>

在你的情况下:

git rebase --onto B C E

这会将D..E中从旧基地C引入的更改放到新基座B上(如果您没有遇到任何冲突)导致

A > B > D' > E'

重要要注意,DE会获得导致D'E'的新sha ID,因此如果您已发布{ {1}},CD使用了恢复方法(E),否则您可能会破坏其他人的历史。