我有一个Web服务器,它服务于一个git存储库的项目.当我对代码进行一些更改时,然后从服务器执行git pull.有时新代码崩溃,我希望能够回滚到最新的拉动,就在之前.我想用脚本做到这一点,而不必搜索最新的sha.我怎样才能做到这一点?
编辑:只是为了澄清,我只想做一个动作,比如按下一个按钮,说"哎呀!我刚刚做的最新拉动是一个错误,我希望我没有这样做".我不想在这种情况下寻找sha或标签或其他任何东西,它更像是一个'撤消'功能.然后我希望能够继续处理代码,并且服务器上的下一次拉动需要带来最新的更改.
Kar*_*ldt 93
git reset --hard HEAD^1会从你所拉的内容中带回一个提交.如果你想让它恢复到拉动之前的状态,请使用git reset --hard HEAD@{1}.在@{1}这里头是在那改变了它在当地的回购的最后一次操作之前,所以它会回去多次提交,如果你做你以前拉几个被推轨道.另请参阅git reflog显示整个列表.
在这种情况下,使用分支是有意义的,它可以在失败或成功时轻松删除或合并。这将帮助您跟踪新内容,并在您遇到比“仅删除上次提交”更复杂的情况时使事情更清晰(尤其是因为您想使用脚本来执行此操作)。所以在你的服务器上:
git fetch --all # fetch new commits from remote
git checkout -b testing # create and switch to branch 'testing'
git merge origin/master # merge new commits from remote branch master
# (in branch 'testing')
Run Code Online (Sandbox Code Playgroud)
...然后测试东西...如果成功:
git checkout master # switch back to master
git merge testing
Run Code Online (Sandbox Code Playgroud)
失败时:
git checkout master
git branch -D testing # remove testing branch
Run Code Online (Sandbox Code Playgroud)
但无论如何......你唯一的一点是删除最后一次提交,你可以git reset像Josh所指出的那样使用。