1.理解分支
- 感性理解:分支可以理解为平行宇宙,但是在用户需要的时候,可以将两个平行宇宙合并,此时两个平行宇宙的效果将会"叠加"
- 理性理解:每次提交,Git都会把它们串成⼀条时间线,这条时间线就可以理解为是⼀个分⽀
- 截⽌到⽬前,只有⼀条时间线,在Git⾥,这个分⽀叫主分⽀,即
master
分⽀
- 截⽌到⽬前,只有⼀条时间线,在Git⾥,这个分⽀叫主分⽀,即
HEAD
理解:HEAD
严格来说不是指向提交,⽽是指向master
,master
才是指向提交的- 所以
HEAD
指向的就是当前分⽀ - 每次提交,
master
分⽀都会向前移动⼀步- 随着用户不断提交,
master
分⽀的线也越来越⻓ - ⽽
HEAD
只要⼀直指向master
分⽀即可指向当前分⽀
- 随着用户不断提交,
- 所以
2.创建分支
- 查看分支:
git branch
*
表示当前HEAD
指向的分支
$ git branch * master
- 创建分支:
git branch branch_name
- 创建好分支之后,Git将会新创建一个指针
- 此时新创建的指针和
master
指向同一个修改,即同一个版本
$ git branch dev $ git branch dev * master
3.切换分支
-
切换分支:
git checkout branch_name
-
将创建分支和切换分支合二为一的命令:
git checkout -b branch_name
$ git checkout dev Switched to branch 'dev' $ git branch * dev master
-
切换到新的分支后,如果进行独立于的
master
分支的修改,并进行提交- 现象:新的分支有的内容,在
master
分支里并不存在 - 原因:两分支指向的提交已经不一样了
$ cat .git/refs/heads/master 13204498006394d6067fbc8b6046885c6e5e9649 $ cat .git/refs/heads/dev 8ef34a28afd16a7c6f3ad43f136212850205bb22
- 现象:新的分支有的内容,在
4.合并分支
- 如果要在
master
分支上能看到最新的提交,就需要将新的分支合并到master
分支 - 合并分支:
git merge branch_name
- 此处的
Fast-forward
表示快进模式- 即:直接将
master
指向新分支的当前提交,所以该种合并方式下速度非常快
- 即:直接将
- 但并不是每次合并都能
Fast-forward
$ git branch dev * master $ git merge dev Updating 1320449..8ef34a2 Fast-forward dev.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 dev.txt
- 此处的
5.删除分支
-
合并完成后,
dev
分⽀对于用户来说就没⽤了,那么dev
分⽀就可以被删除掉 -
删除分支:
git branch -d branch_name
- 注意:如果当前正处于某分⽀下,就不能删除当前分⽀,需要切换到其他分支再删除
- 注意:如果当前正处于某分⽀下,就不能删除当前分⽀,需要切换到其他分支再删除
-
因为创建、合并和删除分⽀⾮常快,所以Git⿎励用户使⽤分⽀完成某个任务,合并后再删掉分⽀,这和直接在master分⽀上⼯作效果是⼀样的,但过程更安全