这必须是简单的,但我找不到它在 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)
我假设在你的工作之间没有其他人插手提交,而且你的坏提交在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"
.
不运行
git revert --continue
只要运行
git commit -m "commit message here"
如果这样还不行,请确保你已经将所有涉及到还原的文件进行了分期。即使是你还原后又丢弃了改动的文件。
你可以将你的 repo 设置在任何之前的提交上,之后的所有改动都会被删除。
git reset --hard
之后用git push --force origin将其推送到github。