我有一个远程Git存储库,我需要将最后的n
提交回滚到冷漠的存档。
答案 0 :(得分:132)
您可以使用git revert <commit>…
进行所有n次提交,然后照常推送,保持历史不变。
或者您可以使用git reset --hard HEAD~n
“回滚”。如果您正在推动公共或共享存储库,您可能会根据原始分支发生分歧并破坏其他工作。 Git会阻止您这样做,但您可以使用git push -f
强制更新。
答案 1 :(得分:37)
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?