回滚远程Git存储库

时间:2009-02-25 23:33:52

标签: git

我有一个远程Git存储库,我需要将最后的n提交回滚到冷漠的存档。

4 个答案:

答案 0 :(得分:132)

您可以使用git revert <commit>…进行所有n次提交,然后照常推送,保持历史不变。

或者您可以使用git reset --hard HEAD~n“回滚”。如果您正在推动公共或共享存储库,您可能会根据原始分支发生分歧并破坏其他工作。 Git会阻止您这样做,但您可以使用git push -f强制更新。

答案 1 :(得分:37)

elmarco是正确的......他的建议最适合共享/公共存储库(或者至少是公共分支机构)。如果没有共享(或者你愿意破坏他人),你也可以推送一个特定的参考:

git push origin old_master:master

或者,如果有一个特定的提交SHA1(比如缩写形式的1e4f99e),你想回到:

git push origin 1e4f99e:master

答案 2 :(得分:8)

幸运的是,我可以使用Pat Notz's solution来完全删除不需要的提交。但是,最初我得到了错误

error: failed to push some refs to 'ssh://git@gitrepo.git'
To prevent you from losing history, non-fast-forward updates were rejected*

但添加力(-f)选项会覆盖此错误

git push -f origin 52e36b294e:master

答案 3 :(得分:3)

如果您可以直接访问远程仓库,则可以始终使用:

git reset --soft <sha1>

这是有效的,因为没有尝试修改不存在的工作目录。有关详细信息,请参阅原始答案:

How can I uncommit the last commit in a git bare repository?