如果将父分支而非子分支重新建立基础,子分支会发生什么?

时间:2020-06-11 06:26:50

标签: git rebase

假设我有以下

 ------------------Dev
     \   
     Branch1------------------Branch2
            \-----Branch3

我想在Branch1中拥有Dev的功能,所以我结帐到Branch1,然后执行git rebase Dev

我希望将分支Branch1移到Dev的顶部,但是Branch2Branch3会怎样?

2 个答案:

答案 0 :(得分:1)

Branch2Branch3不会发生任何变化,它们将保持相同的历史记录。这是图形之前和之后的详细信息。这是之前的内容:

Dev:      A -- B
           \
Branch1:    C -- D
             \    \
Branch3:      \    F
Branch2:       E

git rebase dev中运行Branch1后,出现以下情况:

Branch1:         C' -- D'   (after rebase)
                /
Dev:      A -- B
           \
            C -- D   <-- most likely no branch has a HEAD pointing here at this point
             \    \
Branch3:      \    F
Branch2:       E

对于其他两个分支,应该存在相同的历史记录,因为重新部署仅会重写您提到的目标分支的历史记录。

答案 1 :(得分:1)

分支附加到提交。

git checkout Branch1 && git rebase Dev等效于git rebase Dev Branch1

首先,它找出Branch1可以访问的并且是Dev的新提交。

然后,将这些提交一一应用到Dev上。空提交可能会被忽略。

最后,它将Branch1移动到上一个新提交。

在此过程中,Branch2Branch3留在原处。

以下是之前和之后的图表。图片来自learninggitbranch

之前,

enter image description here

之后

enter image description here

忽略图表上的master。不允许在此应用中删除masterC3是可以从Branch1到达的提交,并且是Dev的新提交。将其应用于Dev并创建C3'Branch1移至C3'C3和其他提交都保持不变,Branch2Branch3也是如此。

用于在学习gitbranch时重现该过程的命令,

git checkout -b Dev
git commit
git checkout -b Branch1 C1
git commit
git checkout -b Branch2
git commit
git checkout -b Branch3 C3
git commit
git checkout Branch2
git commit
git rebase Dev Branch1