Git 分支是多人协作和并行开发的核心,我按「基础常用 → 合并核心 → 远程协作 → 进阶管理」的顺序整理所有常用操作,附说明和最佳实践:


📌 一、基础分支操作(日常高频使用)

1. 查看分支

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 查看所有本地分支(当前分支带 * 标记)
git branch

# 查看所有分支(本地 + 远程)
git branch -a

# 只查看远程分支
git branch -r

# 查看分支+最后一次提交说明
git branch -v

# 查看哪些分支已经合并到当前分支
git branch --merged

# 查看哪些分支还没合并到当前分支
git branch --no-merged

2. 创建分支

1
2
# 创建名为 feature/login 的新分支(只是创建,不会自动切换)
git branch feature/login

💡 新分支是基于当前所在分支的最新提交创建的,和当前分支代码完全一致。


3. 切换分支

1
2
3
4
5
# ✅ Git 2.23+ 推荐新命令(语义清晰,专门用于切换分支)
git switch feature/login

# 📌 传统兼容命令(所有版本支持)
git checkout feature/login

4. 创建 + 切换分支(一步完成,最常用)

1
2
3
4
5
# ✅ 新命令
git switch -c feature/pay

# 📌 传统命令
git checkout -b feature/pay

90% 的场景都是用这个命令:创建新分支并立刻切过去开发。


5. 删除分支

1
2
3
4
5
# 删除已经合并的本地分支(安全删除,未合并不让删)
git branch -d feature/login

# 强制删除未合并的分支(⚠️ 确认不需要这个分支的代码了再用)
git branch -D feature/login

🔗 二、分支合并核心操作

1. 普通合并(merge,最常用,保留合并历史)

把目标分支的代码合并到当前分支:

1
2
3
4
5
# 1. 先切换到要接收合并的分支(比如要把feature合并到main,先切到main)
git switch main

# 2. 执行合并
git merge feature/login

✅ 特点:会生成一个「合并提交」,完整保留两个分支的开发历史,适合公共分支合并。

👉 合并选项

1
2
3
4
5
# 禁止快进合并(强制生成合并提交,推荐团队协作使用,历史更清晰)
git merge --no-ff feature/login

# 只做快进合并(如果不能快进就失败,不生成合并提交)
git merge --ff-only feature/login

2. 变基合并(rebase,线性历史,更干净)

把当前分支的所有提交,"移动"到目标分支的最新提交后面,形成线性历史:

1
2
3
4
5
# 1. 先切换到要变基的分支(比如你的feature分支)
git switch feature/login

# 2. 把feature分支的提交变基到main分支最新代码上
git rebase main

✅ 特点:没有合并提交,历史是一条直线,非常干净;❌ 会修改提交历史,绝对不要在公共分支上使用,只适合自己的本地私有分支。


3. 解决合并冲突

合并/变基出现冲突时:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 1. 打开冲突文件,找到 <<< === >>> 标记,手动修改冲突内容
# 2. 修改完成后,标记冲突已解决
git add 冲突文件名

# 3. 如果是merge冲突:完成合并
git commit

# 3. 如果是rebase冲突:继续变基
git rebase --continue

# ❌ 想放弃合并/变基,回到之前状态
git merge --abort # 放弃merge
git rebase --abort # 放弃rebase

🌐 三、远程分支协作操作(团队开发必备)

1. 推送本地分支到远程

1
2
# 把本地feature/login分支推送到远程,和远程分支关联
git push -u origin feature/login

-u--set-upstream 的缩写,执行一次后,后续直接 git push 即可,不用再写分支名。


2. 拉取远程分支到本地

1
2
3
4
5
6
# 方式1:拉取远程分支并创建本地同名分支(推荐)
git switch feature/login
# 如果本地没有,Git会自动从远程拉取并创建

# 方式2:手动拉取远程分支
git checkout -b feature/login origin/feature/login

3. 关联本地分支和远程分支

本地分支和远程分支断开关联时:

1
git branch -u origin/feature/login

4. 删除远程分支

1
2
3
4
5
# 方式1
git push origin --delete feature/login

# 方式2(推送空分支到远程,等价于删除)
git push origin :feature/login

⚙️ 四、进阶分支管理

1. 重命名分支

1
2
3
4
5
# 重命名当前分支
git branch -m new-branch-name

# 重命名指定分支
git branch -m old-name new-name

2. 临时保存分支修改(切换分支前,代码没写完不想提交)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 保存当前工作区和暂存区的修改
git stash save "临时保存登录功能开发中"

# 查看所有stash记录
git stash list

# 恢复最近一次stash,并删除记录
git stash pop

# 恢复指定stash
git stash apply stash@{0}

# 丢弃stash
git stash drop stash@{0}

3. 摘取单个提交到当前分支

只把另一个分支的某一个提交拿过来,不需要合并整个分支:

1
git cherry-pick 提交哈希值

⚠️ 分支最佳实践(新手必看)

  1. 永远不要直接在main/master分支开发,所有功能都在feature分支开发,合并到main
  2. 公共分支(main/develop)永远不要用rebase,只用merge,保留完整历史
  3. 分支命名规范:feature/xxx(功能)、hotfix/xxx(线上修复)、bugfix/xxx(bug修复)
  4. 合并前先拉取远程最新代码,减少冲突概率
  5. 删除分支前先确认已经合并到主分支,避免代码丢失