拆分一个Git分支为两个分支?(Split a git branch into two branch

2019-06-28 03:30发布

我想,以帮助谁不小心创建一个特性分支从另一个特性分支,而不是创建从主第二个同事。 这本质上是什么,我们现在有...

Master ---A---B---C
                   \
              Foo   E---F---F---H
                                 \
                            Bar   J---K---L---M

这里是我们希望有什么...

Master ---A---B---C
                  |\
             Foo  | E---F---F---H
                  |
             Bar  J---K---L---M

我想到了一个办法是创造FooV2和BarV2分支机构,樱桃采摘个人提交到相应的V2分支机构。 不过我很好奇,有没有更好的方式来处理这种情况?

Answer 1:

它看起来像你对我可以:

git checkout J
git rebase master

编辑:

我试了一下我的建议,并没有工作。 knittl的建议不工作(在我的箱子)。 这里就是我所做的工作:

git rebase --onto master foo bar


Answer 2:

对于更普遍的答案,这将帮助我们了解事情有点不仅仅是“运行此命令”更好,我们需要一个更大的示例。 所以,让我们假设你在这种情况实际上是:

---A---B---C <= Master
            \
             E---F---F---H <= Foo
                          \
                           J---K---L---M <= Bar
                                        \
                                         N---O---P---Q <= Baz

这里是我们希望有什么...

---A---B---C <= Master
           |\
           | E---F---F---H <= Foo
           |\
           | J---K---L---M <= Bar
            \
             N---O---P---Q <= Baz

值得庆幸的是,Git有在选项给我们的一个解决方案rebase的命令!

git rebase --onto [newParent] [oldParent] [branchToMove]

这意味着可以细分为多个部分:

  1. rebase -改变的东西父母
  2. --onto -这是告诉GIT中使用此备用底垫语法标志
  3. newParent -这是分支,你是基础重建将作为它的父分支
  4. oldParent -这是您当前基础重建的分支有作为它的父分支
  5. branchToMove -这是要移动分支(垫底)

关于“老上级分支”该位可能会有点混乱,但它真的做的是它在说“做底垫时忽略我的老上级的变化”。 该oldParent是你如何定义你在哪里移动分支(即branchToMove开始

那么,什么是我们的情况来执行命令?

git rebase --onto Master Bar Baz
git rebase --onto Master Foo Bar

请注意,这些命令的顺序很重要,因为我们需要拉每个分支掀起的“支链”的结束



Answer 3:

您可以变基的酒吧分支到主:

git rebase --onto C H M

如果一些补丁冲突,你必须手动解决这些问题(但你也必须这样做,当采摘樱桃)。 谨慎的话语:当历史已经被发表不重订。



文章来源: Split a git branch into two branches?
标签: git split branch