此时我们切换到feature分支上,执行rebase下令,相当于是想要把master分支归并到feature分支(这一步的场景就可以类比为我们在自己的分支feature上开辟了一段时间了,预备从主干master上拉一下最新改动。模拟了git pull --rebase的情况)
# 这两条下令等价于git rebase master featuregit checkout featuregit rebase master下图为变基后的提交节点图,表明一下其工作原理:
feature:待变基分支、当前分支
master:基分支、目的分支
当在feature分支上执行git rebase master时,git会从master和featuer的共同先人B开始提取feature分支上的修改,也就是C和D两个提交,先提取到。然后将feature分支指向master分支的最新提交上,也就是M。末了把提取的C和D接到M背面,留意这里的接法,官方没说清晰,现实是会依次拿M和C、D内容分别比力,处理处罚辩论后天生新的C’和D’。肯定留意,这里新C’、D’和之前的C、D已经不一样了,是我们处理处罚辩论后的新内容,feature指针自然末了也是指向D’
rebase,变基,可以直接明确为改变基底。feature分支是基于master分支的B拉出来的分支,feature的基底是B。而master在B之后有新的提交,就相当于此时要用master上新的提交来作为feature分支的新基底。现实使用为把B之后feature的提交先暂存下来,然后删掉原来这些提交,再找到master的最新提交位置,把存下来的提交再接上去(接上去是逐个和新基底处理处罚辩论的过程),云云feature分支的基底就相当于变成了M而不是原来的B了。(留意,假如master上在B以后没有新提交,那么就照旧用原来的B作为基,rebase使用相当于无效,此时和git merge就根本没区别了,差别只在于git merge会多一条记录Merge使用的提交记录)
上面的例子可抽象为如下现实工作场景:张三从B拉了代码举行开辟,目条件交了两次,开辟到D了;李四也从B拉出来开辟了而且开辟完毕,他提交到了M,然后合到主干上了。此时张三想拉下最新代码,于是他在feature分支上执行了git rebase master,即把master分支给rebase过来,由于李四更早开辟完并合了主干,云云就相当于张三是基于李四的最新提交M举行的开辟了。
假如在rebase的时间提示有辩论,则处理处罚辩论之后执行
git rebase --continue