撤消或删除以前的Git提交中的更改
这个问题在这里已经有了答案:
您随时可以恢复更改。
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> E
您在分支中不再有C的历史记录。
注意:在这两种情况下,您在此过程中可能会有冲突。 在第一种情况下,因为你正在应用C`而不是E,在第二种情况下,因为你在D上应用D。
尝试git revert C
...并且最好也读man git-revert
你不能这样做, 并得到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'
需要注意的是, D
和E
会得到新的sha ID,从而导致D'
和E'
因此如果您已经发布了C
, D
或E
使用还原方法( git revert C
),否则您可能会混淆其他人的历史。
上一篇: Undo or remove changes from a previous Git commit
下一篇: Downgrading solution from Visual Studio 2017 RC to Visual Studio 2015