暂时回滚,并在当地分支前推进原产地

时间:2013-10-22 08:14:58

标签: git

情况

我们制作了一个特别的促销版本的网站,管理层要求它推动它,我们做了。假设从正常站点开始(为简单起见,将其称为commit 0),我们需要5次提交来创建促销版本,并且所有这些提交都是在master上进行的(因此工作促销站点是提交5)。

现在我们接到一个紧急电话:我们最初提供的促销日期是错误的,促销活动不应该在下周开始。请立即回滚到原始网站。

假设以下

  1. 我们在原点上设置了一个post-receive hook设置,可以直接推送它收到的任何提交。
  2. 我们现在需要网站回滚提交0。
  3. 大约一周后,我们将再次需要从提交5进行更改。
  4. 我们希望在现在和下周之间添加一些错误修复。
  5. 问题

    哪一系列的git命令适合解决这个问题?

    这是一个想法,我认为它会起作用但似乎不是最理想的:

    1. git branch promo保存我们的促销工作以供日后使用
    2. git reset --hard 0回滚到正常网站
    3. git push -f origin master再次推送正常网站。我们需要“强制”标志,否则git会抱怨原点在我们当地的分支之前。
    4. 在提交0之上对master进行一些bug提交,在一周内创建提交6和7。
    5. 下周即将到来的时候
    6. git merge promogit push origin master,是时候再次实际推送该网站的促销版本了。
    7. 那么,有更好的方法吗?我应该使用还原而不是重置吗?有没有办法避免笨拙的-f力旗?其他评论?

2 个答案:

答案 0 :(得分:2)

作为一项规则,我不喜欢重写历史;变化总是向前发展。我会这样做。

# Keep a copy of the promo state
git branch promo

# Undo the changes
git revert 0
git push

在“促销”分支上做你的工作。你可以改变,从“主人”合并,做你喜欢的任何事情。

然后,当它真的是时候:

git merge promo
git push

答案 1 :(得分:1)

对于第5点,我宁愿在promo之上重新定位master

 git checkout promo
 git rebase master
 git checkout master
 git merge promo     # fast-forward master HEAD to promo HEAD
 git push

这样你就可以在测试促销与你所做的错误修正的集成时保持线性历史记录(提交6和7)。