如何完成恢复提交,以及如何恢复大量提交

Pat*_*ell 10 git revert git-revert

这必须简单,但我找不到它git-scm.

我一直在为公共项目做很多小提交,而且我的所有工作都很糟糕.我想删除我所做的一切.有些我刚刚在当地做过,有些我已经推到了'原始大师'.

第一次提交(一周前)是bdbad86......最近的提交是e82401b......

我想让所有这些消失.我试图还原一个.

git status  
# On branch master  
# You are currently reverting commit e82401b.  
#   (all conflicts fixed: run "git revert --continue")  
#   (use "git revert --abort" to cancel the revert operation)  
Run Code Online (Sandbox Code Playgroud)
  1. 我无法弄清楚如何完成这个还原.
  2. 我不想单独进行每次提交,我想把它们全部吹走.

Mic*_*ael 9

而不是跑步

git revert --continue

赶紧跑

git commit -m "commit message here"

如果这不起作用,请确保您已暂存还原中涉及的所有文件。即使是您恢复然后放弃的更改的文件。

  • 我发现尽管我已经付出了一切,但我仍然停留在回归状态。我必须运行 `git commit -m "empty commit to escape revert" --allow-empty`,但这似乎已经修复了它。 (9认同)

Chr*_*yes 5

我在这里假设没有其他人插入你的工作之间的提交,并且你的不良提交在repo的历史中形成一个连续的范围.否则你将不得不变得更复杂.我们假设您的历史记录如下:

e82401b - (master, HEAD) My most recent private commit
...
bc2da37 - My first private commit
cf3a183 - (origin/master) My most recent bad public commit
...
292acf1 - My first bad public commit
82edb2a - The last good public commit
Run Code Online (Sandbox Code Playgroud)

我们要做的第一件事就是吹走尚未公开的提交.您可以使用以下命令执行此操作(请注意,您的更改将消失,应被视为无法恢复):

git reset --hard cf3a183 
Run Code Online (Sandbox Code Playgroud)

等价(并且更具可读性):

git reset--hard origin/master
Run Code Online (Sandbox Code Playgroud)

现在,您对存储库的视图与视图中的视图一致origin/master.您现在想要还原不良公共更改并将其作为还原提交发布.这些说明用于创建单个还原提交.

您可以git revert --no-commit a..b用来恢复从提交之后 开始的所有提交a(注意!),并以提交结束,包括提交b.将为您提交回复.所以,在这里,我们会这样做:

git revert --no-commit 82edb2a..HEAD
Run Code Online (Sandbox Code Playgroud)

或者,等效地:

git revert --no-commit 292acf1^..HEAD
Run Code Online (Sandbox Code Playgroud)

记住,HEAD现在指向同一个地方origin/master.

运行该revert命令后,您现在可以进行更改并准备提交,因此只需运行一个简单的命令即可git commit -m "Reverting those bad changes I accidentally pushed and made public".