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

时间:2013-12-16 05:37:25

标签: 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)  
  1. 我无法弄清楚如何完成此还原。
  2. 我不想单独进行每次提交,我想把它们全部吹走。

3 个答案:

答案 0 :(得分: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

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

git reset --hard cf3a183 

等效(且更具可读性):

git reset--hard origin/master

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

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

b

或等同地:

git revert --no-commit 82edb2a..HEAD

请注意,git revert --no-commit 292acf1^..HEAD 现在指向与HEAD相同的位置。

运行origin/master命令后,您现在已经进行了更改并准备提交,因此只需运行一个简单的revert

答案 1 :(得分:1)

代替运行

git commit -m "commit message here"

只要跑步

{{1}}

如果这不起作用,请确保已暂存还原中涉及的所有文件。甚至是您还原然后丢弃的文件也要更改。

答案 2 :(得分:-1)

您可以在之前的任何提交中设置您的回购,之后的所有更改都将被删除。

git reset --hard

之后将其推送到github使用git push --force origin

访问How do you roll back (reset) a Git repository to a particular commit?