开始分支太晚了,改变我的分支的父级

时间:2012-08-28 15:59:15

标签: git

我有以下情况:

A---B---F---G---H (master)
     \
      \
       C---D---E (experimental)

我的问题是,B是master不应该发生的非常非常糟糕的事情。它属于experimental。但是F --- G --- H没问题。有没有办法让一切看起来像这样:

A---F'---G'---H' (master)
\
 \
  B---C---D---E (experiment)

我已经阅读了关于rebase和类似的内容,但最大的问题是master已被推送到origin

2 个答案:

答案 0 :(得分:5)

在master上,运行:

git revert B

然后,如果该提交的下游更改不受其直接影响,则可以安全地进行推送(即,可以删除提交B的内容而不会破坏其后发生的其他更改。听起来就是这样。)

这将创建:

A---B---F---G---H---I (master)
     \
      \
       C---D---E (experimental)

其中I是还原提交。 Master保留其历史记录,同时删除B的内容,实验保留B的更改。

如果您稍后将实验合并到母版中,则可能必须还原提交I

答案 1 :(得分:3)

git rebase --onto A B master会这样做。

似乎你已经将master推送到orgin,如果你确定覆盖原点的master分支是安全的,只需在master分支上执行git push -f。请注意,它可能会导致其他开发人员从原点撤离时发生冲突。

通常,公共仓库中的分支应保持不变,这意味着您不能指望从主服务器中删除提交B,您所能做的就是修复提交B在新提交中引入的错误并将其再次推送到主服务器。 / p>

如果可以告知你的团队成员有关rebase的事情并且你坚持这样做,那么重写是可以的,只要确保这不会经常被嘲笑。