如何完成还原提交,以及如何还原大量提交

Posted

技术标签:

【中文标题】如何完成还原提交,以及如何还原大量提交【英文标题】:how to finish reverting a commit, and how to revert a lot of commits 【发布时间】:2014-01-03 10:41:00 【问题描述】:

这一定很简单,但我在git-scm找不到。

我一直在为一个公共项目做出很多小的承诺,但我的所有工作都很糟糕。我想删除我所做的一切。有些我刚刚在本地提交,有些我已经推送到'origin master'。

第一次提交(一周前)是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)  
    我不知道如何完成此还原。 我不想单独进行每个提交,我想把它们都吹走。

【问题讨论】:

git revert --abort 为我工作。 【参考方案1】:

我在这里假设没有其他人在您的工作之间插入提交,并且您的错误提交在 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(注意!)到提交b(包括提交b)的所有提交。将分阶段进行还原以供您提交。所以,在这里,我们会这样做:

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

或者,等效地:

git revert --no-commit 292acf1^..HEAD

记住HEAD 现在与origin/master 指向同一个地方。

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

【讨论】:

谢谢,这是我需要的信息。还有一个问题:如何获取(master, HEAD)或(origin/master)信息,以便知道何时执行这两组命令? @Pat 最简单的方法是设置git log 的替代形式,以便让这些信息一目了然。您可以阅读here 了解要使用的格式。一个好的起点是这样的:git log --pretty="%h %Cgreen%d%Creset %s %an %Cblue(%cr)"【参考方案2】:

而不是运行

git revert --continue

快跑

git commit -m "commit message here"

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

【讨论】:

我发现我仍然停留在还原状态,即使我已经提交了所有内容。我不得不运行git commit -m "empty commit to escape revert" --allow-empty,但这似乎已经解决了。

以上是关于如何完成还原提交,以及如何还原大量提交的主要内容,如果未能解决你的问题,请参考以下文章

如何修复还原的 git 提交?

如何解决还原提交冲突

如何还原部分提交? [复制]

如何恢复 SVN 提交?

无论如何都可以查看所有以前的 GIT 还原

在 Git 中,如何恢复在提交之前还原的暂存文件?