Rails回滚部署和master到ref,同时保留新分支中的故障

时间:2013-09-26 21:59:39

标签: ruby-on-rails git capistrano

我最近的一次制作遇到了麻烦(实际上,我们将继续称之为“生产”)部署。

我想(阅读:需要)将部署回滚到之前的提交。实际上,我想回过头来然后逐个cap deploy逐一推进每个提交,直到我看到问题成为现实。我知道我可以使用cap -S revision=8c9ffa787b22cff019b27f71194637aa85506f9c deploy来部署特定的提交。

我的问题是,当我找到提交时,我想坚持如何重置HEADmaster等等,这样基本上,master指向该提交,理想情况下,所有后续提交是在某个名称的新分支中捕获的,比如rabbithole

需要在开发中对git repos进行污染, GitHub ,然后 Capistrano 在生产服务器上自动创建cached-copy

希望我有意义。如果没有,请询​​问更多信息。

谢谢!

2 个答案:

答案 0 :(得分:1)

我说你想恢复你稳定提交和你之间的所有提交。检查一下

git checkout master
git revert XXSHAXX..HEAD

XXSHAXX是您的稳定提交。 这将创建一堆新的提交 - 稳定后每个提交一个。因此,您将在HEAD中拥有与您相当的新提交,并且您的历史记录都不会丢失。

P.S。并且你不会被在同一个回购中工作的其他人打败。

答案 1 :(得分:0)

回滚到之前的提交

cap deploy:rollback

回滚到先前部署的提交

cap deploy:rollback:code

一旦找到了想要保留的提交,你可以做一个rebase。不确定这是否是最好的路线,因为你应该总是警惕强制更新master。

我会暂时更改我的staging环境所在的分支,而不是在主上游推送强制更新。

好的,除了警告:

$ git checkout master; git checkout -b master-backup-before-rebase; git checkout master

可能有更快/更简单的方法来做到这一点,但我们基本上确保我们在master上,创建一个名为master-backup-before-rebase的新分支,然后返回到主。

$ git rebase -i head~XXX

将~X1替换为多次提交,您要删除+ 1。

接下来,将打开一个文本编辑器窗口 - 删除要删除的所有提交的行。保存,然后关闭窗口。

$ git push origin master -f

瞧。

要非常小心,并且确保您的备份分支存在,然后再进行变基,以免因为您有未提交的本地更改或其他原因而意外地留在主分支上。