我想,以帮助谁不小心创建一个特性分支从另一个特性分支,而不是创建从主第二个同事。 这本质上是什么,我们现在有...
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分支机构。 不过我很好奇,有没有更好的方式来处理这种情况?
它看起来像你对我可以:
git checkout J
git rebase master
编辑:
我试了一下我的建议,并没有工作。 knittl的建议不工作(在我的箱子)。 这里就是我所做的工作:
git rebase --onto master foo bar
对于更普遍的答案,这将帮助我们了解事情有点不仅仅是“运行此命令”更好,我们需要一个更大的示例。 所以,让我们假设你在这种情况实际上是:
---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]
这意味着可以细分为多个部分:
-
rebase
-改变的东西父母 -
--onto
-这是告诉GIT中使用此备用底垫语法标志 -
newParent
-这是分支,你是基础重建将作为它的父分支 -
oldParent
-这是您当前基础重建的分支有作为它的父分支 -
branchToMove
-这是要移动分支(垫底)
关于“老上级分支”该位可能会有点混乱,但它真的做的是它在说“做底垫时忽略我的老上级的变化”。 该oldParent
是你如何定义你在哪里移动分支(即branchToMove
) 开始 。
那么,什么是我们的情况来执行命令?
git rebase --onto Master Bar Baz
git rebase --onto Master Foo Bar
请注意,这些命令的顺序很重要,因为我们需要拉每个分支掀起的“支链”的结束 。
您可以变基的酒吧分支到主:
git rebase --onto C H M
如果一些补丁冲突,你必须手动解决这些问题(但你也必须这样做,当采摘樱桃)。 谨慎的话语:当历史已经被发表不重订。