创建与合并分支

在版本回退中,我们已经知道每次提交,GIT会把他们都串成一条时间线,这条时间线就是一个分支。截至目前位置,只有一条时间线,在Git里面这个分支叫做主分支,即main分支。HEAD 指向 main,main 指向 提交,所以HEAD指向的就是当前分支

在一开始的时候,main只是一条线,然后用 HEAD 指向 main ,就能确定当前的分支,以及当前分支的提交点。每次提交,main分支都会向前移动一步,这样,随着你不断提交,main分支的线也越来越长。

当我们创建新的分支的时候,例如dev,Git新建了一个指针叫做dev,指向与main相同的提交,然后再把 HEAD 指向dev,就表示当前分支在dev
因此可以得出:在 Git 中创建一个新的分支很快!!因为除了新增一个指针,改变HEAD的指向,工作区的文件都没有发生任何变化。不过从这之后我们对工作区的修改还有提交就是针对 dev 分支了,比如新提交一次后,dev指针会向前移动一步,但是main不会。

假设我们完成了 dev 上的工作,这个时候我们就可以把 dev 上的工作合并到 main 上面。
最简单的合并方式就是直接把 main 指向 dev 的当前提交,就完成了提交。
合并完之后我们甚至可以删除 dev 分支,这样我们就只剩下一个main分支了。

解决冲突

情况:我们新建了分支往前走了一步,我们回到 main 又走了一步,且这两步修改的是同一处地方,我们在此时就没有办法merge了。
这就是冲突,我们需要做的是在main手动修改成我们想要的内容。然后修改之后冲突就结束了,这样我们就可以正常的操作了。

分支管理策略

通常我们合并分支的时候我们一般用的是Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。如果我们强制禁用的话,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息了。即从直线变成三角形。

git merge --no-ff -m "merge with no-ff" dev

Bug分支

当你在有一个任务的时候,你并不方便立马commit,所以就需要用到一个stash功能。

git还提供了一个cherry-pick的命令,能够让我们复制一个特定的提交到当前分支

feature分支

我们利用git branch -D <branch-name>来删除一个没有被合并过的分支