【发布时间】:2012-03-16 02:57:54
【问题描述】:
我已经将几个提交推送到远程存储库,发现它们正在产生问题。
我怎样才能回到以前的版本?也就是去掉最近的两个commit?
【问题讨论】:
我已经将几个提交推送到远程存储库,发现它们正在产生问题。
我怎样才能回到以前的版本?也就是去掉最近的两个commit?
【问题讨论】:
由于您已经将提交推送到远程存储库,最好的方法可能是还原这两个提交,这样您就不会给已经从远程存储库拉取的任何人造成任何问题。
示例使用以下提交历史记录:
e512d38 Adding taunts to management.
bd89039 Adding kill switch in case I'm fired.
da8af4d Adding performance optimizations to master loop.
db0c012 Fixing bug in the doohickey
如果您只想恢复提交而不修改历史记录,您可以执行以下操作:
git revert e512d38
git revert bd89039
或者,如果您不希望其他人看到您添加了终止开关,然后将其删除,您可以使用以下方法回滚存储库(但是,这会导致其他已经从遥控器):
git reset --hard da8af4d
git push origin -f localBranch:remoteBranch
其中localBranch 是本地分支的名称,remoteBranch 是远程分支的名称。
【讨论】:
git reset --hard 将撤消工作树中的任何本地修改,包括那些不属于麻烦提交的部分。如果有疑问,当然建议先备份该工作树(快速tar 会很好)。
我认为你可以在本地回滚并推送结果:
$ git reset HEAD^ --hard
$ git push REMOTE -f
“REMOTE”是远程名称。
【讨论】:
git revert。另一方面,可能有完全不同的动机(如 David M. Syzdek 的回答)。在某些情况下,没有好的解决方案,只有最不坏的解决方案(因情况而异)。
首先输入这个命令。
git log -n 4
此命令将显示您最近 4 次提交及其 SHA。在此之后键入以下命令。
git rebase -i SHA_ID
输入您要删除的提交之前的提交的 SHA,而不是 SHA_ID。
在此之后将打开一个文件,在该文件的顶部,您将看到 SHA 和您要删除的提交的消息。删除此行并保存并退出文件。
完成此操作后,您必须推动。所以输入以下命令。
git push -f origin master
完成此操作后,您可以看到您的提交已被删除。
【讨论】:
git push origin -f last_good_commit:yourEditingBranch
last_good_commit 将成为分支的新负责人。然后在本地进行硬重置:
git reset origin/yourEditingBranch
【讨论】: