使用部署钩子回滚git存储库

3

我在生产服务器上设置了一个裸的git仓库,并使用post-receive钩子来部署我推送的任何内容:

#!/bin/sh
GIT_WORK_TREE=/path/to/webroot git checkout -f

部署我做

git push production

从我的工作站来看,一切都很好。但是如果我提交了有问题的代码并希望尽快撤销,以下步骤可行吗:

git push production [id of commit to revert to]:master

IE是否仍会正确地将所有内容部署到Web根目录中?
1个回答

4
那应该按预期工作。您可能需要执行git push +<commit>:master(请注意+),以替换生产主机HEAD上的错误提交。 +<commit>:master是一个refspec,有关refspecs的更多信息,请参见git push手册页
我建议更明确地回滚而无需强制推送到生产服务器,可以执行以下操作:
git revert <commit to revert>
git push production

或者

git reset --hard <commit to revert to>
git push -f production

查看如何将Git仓库恢复到以前的提交?


如果是这种情况,那么这个命令会做什么:git push production [要还原的提交ID]:master。 - Cameron Ball
抱歉,我不知道我在说什么。 - mwhite
我刚刚使用了类似的设置进行了测试:从中我们将代码推送到一个裸的“生产”存储库,该存储库具有一个 post-receive 钩子,用于更新文件到工作目录。运行 git push +<commit>:master 作为回滚命令非常好用,它将我的暂存目录保留在最新提交状态,以便我可以修复导致我需要回滚部署的任何问题。谢谢! - ryanrain
这个完美运行。然后,当您想要部署到主分支的最新提交时,只需运行 git push production master(与 git push production +HEAD:master 相同)。 - Quinn Comendant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接