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

dev*_*com 5 git

我有以下情况:

A---B---F---G---H (master)
     \
      \
       C---D---E (experimental)
Run Code Online (Sandbox Code Playgroud)

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

A---F'---G'---H' (master)
\
 \
  B---C---D---E (experiment)
Run Code Online (Sandbox Code Playgroud)

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

bcm*_*cfc 5

在主人,运行:

git revert B

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

这将创建:

A---B---F---G---H---I (master)
     \
      \
       C---D---E (experimental)
Run Code Online (Sandbox Code Playgroud)

I还原提交在哪里.大师保留其历史,同时删除B实验保留B的变化内容.

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

  • 谢谢你的答案,但它让历史看起来很复杂,所以我想我会冒着让我的两位开发人员生气并冒险的风险.虽然+1给你. (3认同)

wey*_*amz 3

git rebase --onto A B master会做。

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

一般来说,公共仓库中的分支应该保持不变,这意味着你不能指望从master上删除提交B,你所能做的就是在新的提交中修复提交B引入的错误并将其再次推送到master。

如果可以将变基通知您的团队成员并且您坚持这样做,那么重写就可以了,只需确保这种情况不会经常发生即可。