我如何“解除”已恢复的Git提交?

给定使用commit的更改,然后使用revert进行revert ,然后撤消恢复的最佳方法是什么?

理想情况下,这应该用新的提交来完成,以免重写历史。

如果你还没有推动这个变化, git reset --hard HEAD^

否则,恢复恢复是完全正常的。

另一种方法是git checkout HEAD^^ -- . 然后git add -A && git commit

git cherry-pick <original commit sha>
将制作原始提交的副本,实质上是重新提交提交

恢复回复将做同样的事情,与一个更复杂的提交信息:
git revert <commit sha of the revert>

这两种方法中的任何一种都可以让你在不覆盖历史的情况下进行git push ,因为它在恢复之后创build了一个新的提交。
当inputcommit sha时,通常只需要前5或6个字符:
git cherry-pick 6bfabc

这对我来说很愚蠢。 但是我曾经处于相同的情况,而且我还是回复了提交的提交。 我没有数字回复,所以我不得不还原每个'恢复提交'。

现在我的提交历史看起来有点奇怪。

奇怪的历史

这是一个宠物项目,所以它是可以的。 但是对于现实生活中的项目,我会优先select最后一次提交,然后在一次提交和更合理的评论中还原所有还原的代码。

如果您不喜欢“还原还原”(特别是当这意味着丢失许多提交的历史信息)的想法,您可以随时前往有关“还原有故障的合并”的git文档。

鉴于以下起始情况

  P---o---o---M---x---x---W---x \ / A---B---C----------------D---E <-- fixed-up topic branch 

(W是你合并M的初始回复; D和E是你最初破坏的特性分支/提交的修复)

您现在可以简单地重放提交A到E,以便它们都不属于已还原的合并:

 $ git checkout E $ git rebase --no-ff P 

你的分支的新副本现在可以合并到master

  A'---B'---C'------------D'---E' <-- recreated topic branch / P---o---o---M---x---x---W---x \ / A---B---C----------------D---E