这必须简单,但我无法在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)
答案 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?