Rolling back a remote Git repository

前端 未结 4 1457
谎友^
谎友^ 2020-11-29 15:58

I have a remote Git repository, and I need to roll back the last n commits into cold oblivion.

相关标签:
4条回答
  • 2020-11-29 16:20

    You can use git revert <commit>… for all the n commits, and then push as usual, keeping history unchanged.

    Or you can "roll back" with git reset --hard HEAD~n. If you are pushing in a public or shared repository, you may diverge and break others work based on your original branch. Git will prevent you doing so, but you can use git push -f to force the update.

    0 讨论(0)
  • 2020-11-29 16:23

    elmarco is correct... his suggestion is the best for shared/public repositories (or, at least public branches). If it wasn't shared (or you're willing to disrupt others) you can also push a particular ref:

    git push origin old_master:master
    

    Or, if there's a particular commit SHA1 (say 1e4f99e in abbreviated form) you'd like to move back to:

    git push origin 1e4f99e:master
    
    0 讨论(0)
  • 2020-11-29 16:32

    Fortunately I was in a position to use Pat Notz's solution which completely removed the unwanted commit. However, initially I got the error

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

    But adding the force (-f) option overwrite this error

    git push -f origin 52e36b294e:master
    
    0 讨论(0)
  • 2020-11-29 16:32

    If you have direct access to the remote repo, you could always use:

    git reset --soft <sha1>
    

    This works since there is no attempt to modify the non-existent working directory. For more details please see the original answer:

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

    0 讨论(0)
提交回复
热议问题