如何更改 Git 中的分支点?



假设我的 git 存储库中有以下结构:

C'---D'---E'---F'    (dev)
/ 
A---B---C---D---E---F       (master)

我想C'拉入主分支并将分支点更改为C',即我想将上述内容变成

D'---E'---F'     (dev)
/ 
A---B---C---C'---D---E---F  (master)

我认为我应该使用樱桃采摘和重新定位的组合,但我对如何做到这一点感到困惑。 我应该执行哪个操作序列?


评论后的建议以获得更清晰的架构(因为原始中的同字母提交实际上是不必要的(

G---H---I---J   (dev)
/ 
A---B---C---D---E---F     (master)

与相关的预期结果:

H---I---J    (dev)
/ 
A---B---C---G---D---E---F  (master)

对于您的新图表,简短的回答是您将G重新设置为基准:

git checkout master
git rebase <commit_id_G>

更长的答案是,你很难看到这一点,因为你认为master是"主要"分支,而dev是"分支"。但是,当然,这些分支名称只是标签,您可以将它们中的任何一个视为"主"分支。

而且,由于master是我们实际想要更改的分支,我们可以像这样重新绘制图表:

H---I---J        (master)
/ 
A---B---C---D---E---F---G  (dev)

与相关的预期结果:

H'--I'--J'    (master)
/ 
A---B---C---D---E---F---G   (dev)

希望在这里更容易看到,我们只需要将master从这个新D而不是C.

你只需要将master变基到G

git checkout master
git rebase <id-of-G>

这将重写在master中找到的所有提交,这些提交在G之上的G中找不到。没有必要采摘樱桃。您的dev分支将保持不变。

您需要执行以下操作:

不要考虑这些提交的哈希引用:CC'DEF。然后:

  1. git checkout master
  2. git reset --hard C
  3. git cherry-pick C'
  4. git checkout dev
  5. git rebase -i master(交互式变基以摆脱C'(
  6. git checkout master
  7. git cherry-pick D
  8. git cherry-pick E
  9. git cherry-pick F

--force推动两个分支完成。

如果你对git不满意,我不建议这样做,但如果绝对需要这样做,我会这样做。

你总是可以走这条路

D'---E'---F'     (dev)
/ 
A---B---C---D---E---F---C'  (master)

然后cherry-pick C'将您的dev分支重新定位以对抗master.这将是最简单的解决方案。

相关内容

  • 没有找到相关文章

最新更新