上篇博客聊了《git分支管理之rebase 以及 cherry-pick相关操作》本篇博客我们就以Learning Git中的关卡进行展开。下方列举了LearningGit中的 merge、rebase、reset、revert、cherry-pick 以及交互式rebase相关关卡的操作以及对应的解析。后边在聊交互式rebase操作是,不单单给出了LearningGit中的内容,而且给出了真正的Git分支在交互式rebase操作时的具体案例。
learngitbranching的地址为:https://learngitbranching.js.org/
一、代码合并
在下方示例中所有目标的初始化状态是下方这样的,然后我们要按照目最终目标,使用相关的git命令来达到相关的目标。
1、git merge
下方就是我们要达到的目标,下方是我们达到下方目标所要做的事情:
首先需要做的就是创建一个新的分支bugFix, 并切换到该分支上,然后进行一次C2的提交。
然后再切回到master分支上,进行一次新的提交(C3)。
最后要做的就是在master分支上执行一次合并操作,将bugFix分支上的提交合并到master分支上,C4就是合并后的节点。
下方对应的就是我们实现上述目标所对应的命令操作,具体如下所示:
首先使用 git checkout -b bugFix, 新建并切换到bugFix分支上,并且使用 git commit 命令进行一次提交生成C2节点。
然后使用 git checkout master 命令切换到master分支上,并且使用 git commit 命令进行一次提交生成C3节点。
最后的话,就是在 master 分支上执行 git merge bugFix命令,将bugFix分支合并到master分支上,合并后会生成一个新的C4节点。具体如下所示:
2、git rebase
闯完git merge的关,我们来看一下git rebase的关。下方就是我们最终要实现的目标。实现下方目标和上面的merge操作差不多,只不过最后一步不是使用合并操作,而是在bugFix上执行变基操作,具体分析如下:
首先需要做的就是创建一个新的分支bugFix, 并切换到该分支上,然后进行一次C2的提交。
然后再切回到master分支上,进行一次新的提交(C3)。
然后在切换到 bugFix 分支上,执行变基操作,将bugFix的父节点变成master分支,之前的C2节点就被新的提交C2`所替代了。
下方是我们的具体命令操作:
首先使用 git checkout -b bugFix, 新建并切换到bugFix分支上,并且使用 git commit 命令进行一次提交生成C2节点。
然后使用 git checkout master 命令切换到master分支上,并且使用 git commit 命令进行一次提交生成C3节点。
然后再使用 git checkout bugFix 命令切回到 bugFix 分支上。
最后在bugFix分支上执行 git rebase master 命令,经其父类变成master。执行变基后,C2会和C3节点的内容进行合并生成新的节点C2`,而bugFix分支的指针也会从C2节点移动到C2`上,移动后bugFix之前的分支就会被废弃掉,取而代之的是从master延续下来的新分支。
二、分离HEAD
1、移动HEAD指针
HEAD指针是指向当前所在的操作分支,比如我们现在是在master分支,那么HEAD就指向master分支,然后master分支指向的是我们的commit号。分离的 HEAD 就是让其指向了某个具体的提交记录而不是分支名。下方左边的图就是我们要完成的目标,右边是我们分支的初始化状态。