如何完成恢复一个提交,以及如何恢复大量的提交。

问题描述 投票:15回答:3

这必须是简单的,但我找不到它在 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. 我不想每个提交都单独进行,我想把它们都炸掉。
git revert git-revert
3个回答
6
投票

我假设在你的工作之间没有其他人插手提交,而且你的坏提交在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. 现在,你想恢复你的坏的公共变更,并将其发布为一个revert提交。这些说明是用于创建一个单一的还原提交。

你可以使用 git revert --no-commit a..b 恢复从提交开始的所有提交。之后 a (注意!),并结束于,并包括提交 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".


0
投票

不运行

git revert --continue

只要运行

git commit -m "commit message here"

如果这样还不行,请确保你已经将所有涉及到还原的文件进行了分期。即使是你还原后又丢弃了改动的文件。


-4
投票

你可以将你的 repo 设置在任何之前的提交上,之后的所有改动都会被删除。

git reset --hard

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

访 如何将 Git 仓库回滚(重置)到某个特定的提交?

© www.soinside.com 2019 - 2024. All rights reserved.