Git 分支管理核心操作与策略
在 Git 中,每次提交都会形成一条时间线,这条时间线本质上就是一个分支。目前我们默认只有一条主分支,通常称为 master。
理解 HEAD 的概念很重要:它严格来说不指向具体的提交,而是指向当前的分支(如 master)。HEAD 指向哪个分支,那个分支就是当前正在工作的分支。
[图:分支结构示意图]
创建与查看分支
使用 git branch 命令可以列出当前所有的本地分支。
[图:查看分支列表]
要创建一个新的分支,比如 dev,执行:
git branch dev
创建后,你可以再次运行 git branch 确认新分支已存在。
[图:创建分支示意]
切换分支
切换到其他分支非常简单,使用 git checkout [分支名] 即可。
[图:切换分支示意]
注意观察不同分支的 commit ID 是不同的。切回 dev 分支时,之前的状态会保留;但如果你切回 master,之前在 dev 上未合并的修改不会自动出现在 master 里,除非你提交了变更或进行了合并。
假设我们在 dev 分支修改了文件并提交了,然后切回 master,此时 master 是看不到这些变化的。这是因为两个分支的提交历史是分开的。
[图:分支提交差异]
合并分支
为了让 master 上看到 dev 的新提交,需要将 dev 合并进来。确保当前在 master 分支下执行:
git merge dev
合并成功后,master 就能看见修改后的内容了。
[图:合并成功示意]
这里涉及一个概念叫 Fast-forward(快进模式)。如果 master 没有新的提交,Git 会直接把 master 指针移到 dev 的最新提交,速度很快。但如果两边都有新提交,就会触发合并冲突。
[图:Fast-forward 模式]
删除分支
分支合并完成后,临时分支的使命就结束了。可以使用以下命令删除:
git branch -d [分支名]
注意:你不能在当前所在的分支上直接删除它,必须先切换到其他分支。
[图:删除分支示意]
处理合并冲突
当 dev 和 master 同时修改了同一个文件的同一部分时,Git 无法自动判断保留哪一份,这时就会发生冲突。
[图:冲突产生示意]
Git 会在文件中标记出冲突区域,你需要手动编辑文件,决定保留哪段代码,或者进行整合。修改完成后,重新 add 并提交即可解决冲突。
[图:手动解决冲突]
解决后,可以用 git log --graph --pretty=oneline --abbrev-commit 查看分支合并的历史走向。
强制禁用 Fast-forward 模式
默认的 Fast-forward 模式虽然高效,但有时会抹去分支合并的痕迹,导致历史记录不够清晰。为了保留合并节点,可以使用 --no-ff 参数。
git merge --no-ff -m "描述信息" [分支名]


