第5章Git分支操作

5.1****什么是分支
几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作
从开发主线上分离开来,以免影响开发主线。
5.1.1Git 的 master 分支的理解:
master 分支并不是一个特殊分支,它跟其它分支没有区别。 之所以几乎每一个仓库都
有 master 分支,是因为 git init 命令默认创建它,并且大多数人都懒得去改动它,是默认分
支。

5.1.2实际开发的场景:
在版本控制过程中,同时推进多个任务,为每个任务创建一个单独分支。每个程序员在
自己的分支里写代码,开发完成后提交。小组长负责合并分支到主干 master、测试、发布新
版本。

使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,
不会影响主线分支的运行。
对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本。
5.2****分支的好处
- 同时并行推进多个功能开发,提高开发效率。
- 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。 失败的分支删除重新开始即可。
5.3****分支的操作

5.3.1****查看分支
1**)基本语法**
git branch -v
2**)使用举例**

此时只有一个分支。
5.3.2****创建分支
1**)基本语法**
git branch****分支名
2)使用举例

说明:因为 hot-fix 分支是从 master 分支拷贝过来的,所有后面的 id 是相同的。
5.3.3修改master****分支
1**)在master分支上做修改**

2**)添加暂存区**

3**)提交本地库**

4**)查看分支**

说明:此时两个分支的 id 版本不同了。
5**)查看master分支上的文件内容**

5.3.4****切换分支
1**)基本语法**
git checkout****分支名
2**)使用举例**
- 分支由 master 改为 hot-fix

-
查看 hot-fix 分支上的文件内容发现与 master 分支上的内容不同
-

-
创建分支和切换分支图解:
-

Master、Hot-fix 其实都是指向具体版本记录的指针。当前所在的分支,其实是由 Head
决定的。
Head 如果指向 master,那么我们现在就在 Master 分支上,Head 如果执行 Hot-fix,那
么我们现在就在 Hot-fix 分支上。
所以切换分支的本质就是移动 Head 指针
5.3.5 修改子分支
1**)在hot-fix分支上做修改**

2**)添加暂存区**

3**)提交本地库**

注意:此时 master 分支和 hot-fix 分支是独立的两套代码。
5.3.6****合并分支
1**)基本语法**
git merge****分支名
说明:在当前分支下,将其它分支的代码合并过来。
2**)使用举例**
- 切换回到 master 分支

- 在 master 分支上合并 hot-fix 分支

如果 master 或 hot-fix 分支只有一个分支修改过,则合并不会出现冲突;如果两个分支
都各自修改过同一份文件,则合并会出现冲突。
5.3.7****产生冲突
1**)冲突产生的表现:后面状态为****MERGING**

2**)冲突产生的原因:**
合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git 无法替
我们决定使用哪一个。必须手工解决新代码内容。
3**)查看状态(检测到有文件有两处修改)**

5.3.8解决冲突(三步骤)
1**)步骤1:编辑有冲突的文件**
这里手动编辑并处理有冲突的文件。
具体操作:删除特殊符号,决定要使用的内容
特殊符号:<<<<<<< HEAD 当前分支的代码 ======= 合并过来的代码 >>>>>>> hot-fix

编辑冲突的文件,把">>>>>>>>>"、"<<<<<<"和"========"等这样的行删除,
编辑至满意的状态,提交。
2**)步骤2:添加到暂存区**

3**)步骤3:执行提交**

提交后,发现后面 MERGING 消失,变为正常。
注意:此时使用 git commit 命令时不能带文件名。因为我们解决冲突,可能存在于多个
文件中,这里就不能也不需要指定具体的文件名了。
5.3.9****如何避免冲突
- 各人维护各人的代码分支,要避免多个人在各自分支上修改同一个文件。
- 避免在 master 分支上写代码。
在一个项目中,配置类和工具类是可能被多人多个子模块共享的,都修改的话,怎么避
免冲突?回答:尽量由一个人进行统一的维护。修改好后,其他人来更新即可。
5.4****小练习
程序员猴子的 Git 使用经历:

拓展功能:git stash (不常用)
