git rebase紧急沙箱提交而不影响在舞台上破坏的另一个提交

时间:2014-09-19 19:30:10

标签: git

这可能是一个部分独特的场景,但我想要改变,并觉得我可能会打破"阶段"回购分公司。

请注意,我是唯一的开发人员,不用担心任何其他开发人员有这些结帐。

我们有机票201,我们有紧急机票407. 201和407(按此顺序)已经成功通过,合并到STAGE(分支机构),然后推到舞台。

这两张门票都未能在舞台上通过QA,所以他们都需要修复。 407成为紧急修复。 201将等到407进入生产阶段。我不得不回到沙盒(分支)并修复它。它现在已经修复,并准备提交。 201需要等待。 201在407之前提交,并显示在沙箱日志和阶段日志上。

我担心如果我暂时在沙盒上反弹201(不确定这是否是最好的方法)来完成407修复,那么当我去合并然后推送到一些不知道的事情会发生和推动(或合并) )因为201(刚刚在沙盒上重新定义)在舞台上受到影响而会抱怨未知的错误。

有没有办法退出(票201)让407让路进入舞台?那个已经上台的201会发生什么?

2 个答案:

答案 0 :(得分:2)

Rewriting history是一件棘手的事。就个人而言,我将尝试keep things simple(特别是面对紧急情况),并将这些修复提交为新提交,明确标记为" Fix 407" 等消息和"分别修复201" ,然后将它们合并回STAGING分支。毕竟,这些新提交有多糟糕?

如果您真的想重写之前提交的内容......

其中一种方法是回滚到提交之前两个分支机构的原始提交 。既然这个提交无论如何都会被打破,人们可能会争辩说它不应该继续上演,而是单独生产。您可以像这样使用git resetgit branch -f

git reset --soft commit_sha_of_201_parent

git branch -f staging_branch commit_sha_of_201_parent
git branch -f sandbox_branch commit_sha_of_201_parent

回滚后,您可能会发现git stash有助于管理那些(临时)回滚未提交的更改。现在,您可以逐步修复代码;第一张票407,然后是票201.最后,他们可以合并回你的staging分行。

正如@Tony指出的那样,你应该在尝试之前制定克隆/备份你的东西的计划。

祝你好运。

答案 1 :(得分:0)

如果我正确了解您的情况,您有2个功能分支已按特定顺序合并到主分支中,并且您想知道是否可以再次合并它们(添加了其他提交) )以不同的顺序。是吗?

这应该是绝对正常的,只要它们不会影响相同(或相邻)的代码行,在这种情况下,您当然会遇到冲突(无论您合并它们的顺序如何)。但是,如果您想要更清晰的历史记录,您可以随时将分段分支重置为合并任一分支之前的状态,然后再次合并它们(按任意顺序)。

如果有疑问,只需确保本地克隆中的所有分支都与您的权威远程数据库保持同步,然后如果您在本地遇到任何合并问题,您只需重置受影响的分支机构即可。远程(在这种意义上,它实际上充当了备份)。如果您需要在不触及原件的情况下进行实验,也可以创建分支的本地备份,例如

$ git checkout stage
$ git checkout -b stage_bak

如果愿意,您甚至可以创建整个存储库的另一个本地克隆。无论你如何做到这一点,我确实发现,真正弄清楚你可以用Git做什么的最好方法就是尝试一下,打破它,重置它然后再试一次。

祝你好运!