前面我们聊了Git的日常操作和入门基础,今天终于要啃下版本控制里的"核心技能"------分支。你是不是遇到过:写新功能时不敢动主代码?线上Bug要修,手头的开发还没做完?多人协作时代码越改越乱?这些问题,用对Git分支就能一次性解决。这篇我们从分支的基础操作(创建/切换/删除)讲到实战场景(并行开发/紧急修复),最后补上最头疼的"冲突解决"技巧,帮你把分支用成团队协作的"效率工具"。
Git的默认分支就是master。你所做的commit会在master分支上自动移动。在多次提交操作之后,master分支指向最后那个commit object(提交对象链)。
Git的master分支并不特殊,和其他分支没有区别。之所以几乎每一个仓库都有master分支,是因为git init 命令默认创建它。
分支创建
bash
通过git branch 来查看和创建分支
git branch dev
分支切换到dev
git checkout dev
创建分支和切换分支同时完成
git checkout -b dev2
例如,在dev2分支创建文件并添加到暂存区和版本库的过程在其他分支可以看到,但是最后提交后的文件无法在其他分支看到。(需要分支合并)
注意:文件哪个分支提交算哪个分支的,比如dev2只是放到了暂存区,如果没有提交而是用dev分支进行了提交那么只会在dev分支显示,其他分支都没有。
分支删除
bash
# git branch -d 分支名
git branch -d dev
1,不能删除自己所在的分支

2,可以删除一个合并后的或者没有发生变化的分支
3,如果一个分支发生了变化(添加或修改文件)不能删除
强制删除
bash
git branch -D dev2
分支合并
bash
git merge 分支名

分支的本质
master指向的是提交
HEAD是指向当前的分支,当前在哪个分支就指向哪个分支


分支冲突
当两个分支上对文件的修改可能会存在冲突,例如同时修改了同一个文件的同一行,这时就需要手动解决冲突,解决冲突步骤如下:
-
处理文件中冲突的地方
-
将解决完冲突的文件加入暂存区(add)
-
提交到仓库(commit)
Git stash
作用是将目前还不想提交的但是已经修改的内容进行保存至堆栈中,后续可以在某个分支上回复出堆栈中的内容。也就是说,stash中的内容不仅可以恢复到原先开发的分支,也可以恢复到其他任意指定的分支上。git stash作用的范围包括工作区和暂存区中的内容,也就是说没有提交的内容都会保存在堆栈中。
bash
git stash [-u/-a/-all]
-
默认情况下,git stash 会保存已跟踪文件的修改
-
若要同时保存未跟踪文件(未通过 git add 加入版本控制的新文件,需要使用 -u)来保存
-
若要保存忽略文件(如.gitignore中指定的文件),可以使用 -a 或 -all 参数,它会保存所有未提交的修改(包括跟踪,未跟踪,忽略的文件)
总结:执行git stash后,工作区和暂存区会恢复到最近一次提交(HEAD)的状态,后续可通过
git stash pop 或者 git stash apply 恢复保存的内容。
pop和apply的区别
1.git stash apply
-
仅将 stash 中的修改应用到当前工作区,不会删除该 stash 记录。
-
适用场景:需要在多个分支重复应用同一份 stash 时(例如同一修改需在多个分支测试),可以多次使用 apply。
-
示例:git stash apply stash@{0}(指定应用第 0 个 stash,不指定则默认最新的)。
bash
git stash apply
2.git stash pop
-
将 stash 中的修改应用到当前工作区后,会自动删除该 stash 记录。
-
适用场景:确认只需要应用一次 stash,且之后不再需要该记录时,用 pop 更简洁。
-
示例:git stash pop(默认应用最新的 stash 并删除它)。
bash
git stash pop
展示所有现存的stash记录
bash
git stash list
注意:取出一个文件后需要提交后才能取出第二个,不然会报错。
git的分支整体浏览图如下:

主要包含以下几个分支:
-
master:git默认注分支(这里不做操作)。
-
stable:稳定分支,替代master,主要用来版本发布。
-
develop:日常开发分支。该分支正常保存了开发的最新代码。
-
feature:具体的功能开发分支,只与develop分支交互。
-
release:release分支可以认为是stable分支的未测试版本。比如说某一期的功能全部开发完成,那么就将develop分支合并到release分支,测试没有问题并且到了发布日期就合并到stable分支,进行发布。
-
bugfix:线上bug修复分支。