目录
[1 理解分支](#1 理解分支)
[1.2 git branch](#1.2 git branch)
[2 创建分支](#2 创建分支)
[2.1 创建分支操作](#2.1 创建分支操作)
[3 切换分支](#3 切换分支)
[3.1 切换分支操作](#3.1 切换分支操作)
[4 合并分支](#4 合并分支)
[4.1 合并操作](#4.1 合并操作)
[4.2 合并策略](#4.2 合并策略)
[4.3 撤销合并](#4.3 撤销合并)
[5 删除分支](#5 删除分支)
[5.1 删除本地分支](#5.1 删除本地分支)
[5.2 删除远程分支](#5.2 删除远程分支)
[5.3 批量删除分支](#5.3 批量删除分支)
[5.4 恢复误删的分支](#5.4 恢复误删的分支)
[6 合并冲突](#6 合并冲突)
[6.1 解决合并冲突](#6.1 解决合并冲突)
1 理解分支
在版本回退⾥,每次提交,Git都把它们串成⼀条时间线,这条时间线就可以理解为是⼀个分⽀。截⽌到⽬前,只有⼀条时间线,在Git⾥,这个分⽀叫主分⽀,即 master 分⽀。
再来理解⼀下HEAD,HEAD 严格来说不是指向提交,⽽是指向master,master才是指向提交的,所以,HEAD 指向的就是当前分⽀。

每次提交,master分⽀都会向前移动⼀步,这样,随着你不断提交,master分⽀的线也越来越⻓,⽽HEAD只要⼀直指向master分⽀即可指向当前分⽀。
1.2 git branch
(1)基本语法
git branch [选项] [分支名] [起始提交]
(2)常用选项
|------------|-----------------|
| 选项 | 说明 |
| -a | 显示所有分支(本地 + 远程) |
| -r | 仅显示远程分支 |
| -v | 显示分支的最后提交信息 |
| -vv | 显示分支及其跟踪的远程分支 |
| -d | 删除已合并的分支 |
| -D | 强制删除分支(即使未合并) |
| -m | 重命名分支 |
| --track | 创建分支并跟踪远程分支 |
| --no-track | 创建分支但不跟踪远程分支 |
(3)功能
git branch 是 Git 中用于 分支管理 的核心命令,它可以 查看、创建、重命名和删除分支。分支是 Git 最重要的功能之一,它允许你在独立线上开发,而不会影响主代码。
常用选项:
- 查看分支
- 创建分支
- 删除分支
- 重命名分支
- 设置远程跟踪分支
-
查看分支
git branch # 查看本地分支(当前分支前带
*)
git branch -v # 查看分支 + 最后提交信息
git branch -vv # 查看分支 + 关联的远程分支
git branch -a # 查看所有分支(本地 + 远程)
git branch -r # 仅查看远程分支 -
创建分支
git branch <new-branch> # 基于当前提交创建分支
git branch <new-branch> <commit> # 基于某次提交创建分支 -
删除分支
git branch -d <branch> # 删除已合并的分支(安全)
git branch -D <branch> # 强制删除未合并的分支(危险!)
git push origin --delete <branch> # 删除远程分支 -
重命名分支
git branch -m <old-name> <new-name> # 重命名分支
git branch -m <new-name> # 重命名当前分支 -
设置远程跟踪分支
git branch -u origin/main # 让当前分支跟踪 origin/main
git branch --set-upstream-to=origin/main # 同上(旧版 Git)
2 创建分支
2.1 创建分支操作
(1)基于当前分支创建新的分支
git branch <new-branch> # 基于当前提交创建分支
git branch <new-branch> <commit> # 基于某次提交创建分支
// 示例
git branch dev # 基于当前分支创建 dev
git branch hotfix abc123 # 基于 commit abc123 创建 hotfix
lz@VM-8-15-ubuntu:~/gitcode$ git branch
dev
* master
当我们创建新的分⽀后, * 表⽰当前 HEAD 指向的分⽀是那一个分⽀
(2)创建并立即切换到新分支
git checkout -b <新分支名>
# 或(Git 2.23+ 推荐)
git switch -c <新分支名>
// 示例
git checkout -b hotfix # 创建并切换到 `hotfix` 分支

3 切换分支
3.1 切换分支操作
(1)切换到本地已有分支
git checkout <branch> # 切换到已有分支
git checkout -b <new-branch> # 创建并切换到新分支(基于当前分支)
git checkout -b <new-branch> <commit> # 基于某次提交创建分支
// 示例
git checkout dev #切换到dev分支
lz@VM-8-15-ubuntu:~/gitcode$ git checkout dev #切换分支
Switched to branch 'dev'
lz@VM-8-15-ubuntu:~/gitcode$ git branch #查看分支
* dev
master
(2)切换到远程分支
git checkout -t origin/<远程分支名> # 自动创建本地分支并跟踪远程
# 或
git switch -c <本地分支名> origin/<远程分支名>
// 示例
git checkout -t origin/feature-login # 本地分支名默认为 `feature-login`
git switch -c login origin/feature-login # 自定义本地分支名

在切换分支后,对当前所处的分支进行操作不会影响其他分支的改变,除非对分支进行合并
4 合并分支
4.1 合并操作
(1)快速合并(Fast-Forward Merge)
当目标分支(如 main )是当前分支(如 feature )的直接祖先时,Git 会执行快速合并(仅移动指针)
-
分支线性历史(无并行提交)
-
适合短期功能分支合并
git checkout master # 切换到目标分支
git merge dev # 将 feature 合并到 main
(2)非快速合并(三方合并)
当两个分支有分叉历史时,Git 会创建新的合并提交
-
保留完整分支历史(即使可快速合并)
-
推荐用于长期分支合并(如 dev → main)
git checkout main
git merge feature --no-ff # 强制禁用快速合并
4.2 合并策略
(1)普通合并(默认)
git merge feature
(2)非 first forward 模式合并
git merge --no-ff -m "merge with no-ff" dev2
(3)压缩合并(Squash Merge)
将多个提交压缩成一个新提交再合并
适用场景:
-
清理功能分支的琐碎提交
-
保持主分支历史简洁
git merge --squash feature
git commit -m "合并 feature 分支"
4.3 撤销合并
(1)合并未提交时撤销
git merge --abort
(2)合并已提交后撤销
git reset --hard HEAD~1 # 回退到合并前状态(慎用!)
# 或
git revert -m 1 <合并提交的哈希> # 创建反向提交(推荐)

5 删除分支
5.1 删除本地分支
(1)删除已合并的分支(安全操作)
git branch -d <分支名>
// 示例
git branch -d feature-login # 删除已合并的 feature-login 分支
(2)强制删除未合并的分支(危险操作)
git branch -D <分支名>
// 示例
git branch -D experimental # 强制删除未合并的 experimental 分支
5.2 删除远程分支
(1)删除远程分支
git push origin --delete <远程分支名>
# 或
git push origin :<远程分支名> # 旧语法(等效)
// 示例
git push origin --delete feature-payment # 删除远程的 feature-payment 分支
(2)同步本地远程分支缓存
删除远程分支后,本地仍可能保留远程分支的缓存记录,需清理:
git fetch --prune # 自动清理已删除的远程分支缓存
5.3 批量删除分支
(1)删除所有已合并的分支(保留主分支)
git branch --merged | grep -v "main" | xargs git branch -d
- 说明 :
- git branch --merged:列出已合并的分支。
- grep -v "main" :排除主分支(如 main 或 master)。
- xargs git branch -d:逐个删除。
(2)删除所有匹配名称的分支
git branch | grep "feature/" | xargs git branch -D # 强制删除所有 feature/ 开头的分支
5.4 恢复误删的分支
如果误删了未合并的分支,可以通过以下步骤恢复:
(1)查找分支的最后提交哈希:
git reflog # 查看操作历史,找到被删分支的最后 commit
(2)从提交重新创建分支:
git branch <分支名> <commit-hash>
(3)示例
git branch experimental abc123 # 从 commit abc123 恢复 experimental 分支

6 合并冲突
合并冲突是 Git 中常见的问题,当两个分支对同一文件的同一部分进行了不同的修改时,Git 无法自动决定保留哪个修改,就会产生冲突
常见的合并冲突场景:
- 两个分支修改了同一个文件的同一区域
- 一个分支删除了文件,另一个分支修改了该文件
- 二进制文件的修改

6.1 解决合并冲突
(1)识别冲突
当执行 git merge 或 git pull 时遇到冲突,Git 会显示类似消息:
lz@VM-8-15-ubuntu:~/gitcode$ git merge dev
Auto-merging test.txt
CONFLICT (content): Merge conflict in test.txt
Automatic merge failed; fix conflicts and then commit the result.
(2)查看冲突文件
lz@VM-8-15-ubuntu:~/gitcode$ cat test.txt
<<<<<<< HEAD
bbb
=======
aaa
>>>>>>> dev
(3)手动解决冲突
- 打开冲突文件
- 决定保留哪部分修改,或进行整合
- 删除冲突标记 (<<<<<<<, =======, >>>>>>>)
(4)标记冲突已解决
git add <已解决冲突的文件>
(5)完成合并
git commit