假设我有以下
------------------Dev
\
Branch1------------------Branch2
\-----Branch3
我想在Branch1
中拥有Dev
的功能,所以我结帐到Branch1
,然后执行git rebase Dev
。
我希望将分支Branch1
移到Dev
的顶部,但是Branch2
和Branch3
会怎样?
答案 0 :(得分:1)
Branch2
和Branch3
不会发生任何变化,它们将保持相同的历史记录。这是图形之前和之后的详细信息。这是之前的内容:
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
移动到上一个新提交。
在此过程中,Branch2
和Branch3
留在原处。
以下是之前和之后的图表。图片来自learninggitbranch。
之前,
之后
忽略图表上的master
。不允许在此应用中删除master
。 C3
是可以从Branch1
到达的提交,并且是Dev
的新提交。将其应用于Dev
并创建C3'
。 Branch1
移至C3'
。 C3
和其他提交都保持不变,Branch2
和Branch3
也是如此。
用于在学习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