我如何“解除”已恢复的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