Git 分支管理完全指南:branch/checkout/merge/rebase

小飞兽 Git 104 次阅读 2026-07-29

Introduction

分支是 Git 最强大的功能之一,它允许你在不影响主线代码的情况下开发新功能或修复问题。掌握分支管理是 Git 进阶的必经之路。本文详细介绍 Git 分支的创建、切换、合并与变基操作,助你高效管理代码版本。

基础语法

# 查看分支
git branch                    # 查看本地分支(当前分支前有 * 标记)
git branch -a                 # 查看所有分支(包括远程)
git branch -v                 # 查看分支及最新提交

创建分支

git branch <分支名> # 创建新分支(不切换) git checkout -b <分支名> # 创建并切换到新分支 git switch -c <分支名> # 同上,Git 2.23+ 推荐语法

切换分支

git checkout <分支名> # 切换到已有分支 git switch <分支名> # 同上,Git 2.23+ 推荐语法

删除分支

git branch -d <分支名> # 安全删除(已合并) git branch -D <分支名> # 强制删除(未合并也删除)

合并分支

git merge <分支名> # 将指定分支合并到当前分支 git merge --no-ff <分支名> # 禁用快进合并,保留分支历史

变基(Rebase)

git rebase <目标分支> # 将当前分支变基到目标分支 git rebase -i HEAD~<n> # 交互式变基,修改最近 n 条提交

stash 暂存工作区

git stash # 暂存当前工作区 git stash pop # 恢复暂存并删除 git stash list # 查看暂存列表

完整代码示例

# ===== Git 分支管理实战 =====

1. 初始化仓库并创建初始提交

git init branch-demo cd branch-demo echo "# 分支演示项目" > README.md git add . && git commit -m "init project"

2. 创建并切换到功能分支

git checkout -b feature/login

输出:Switched to a new branch feature/login

3. 在功能分支上开发

echo "登录功能开发中" > login.py git add . && git commit -m "feat: add login module"

echo "验证逻辑" >> login.py
git add . && git commit -m "feat: add validation logic"

4. 查看分支状态

git branch

master

* feature/login (* 表示当前分支)

5. 切回主分支并创建修复分支

git checkout master git checkout -b hotfix/fix-bug

echo "修复了严重bug" >> bug.py
git add . && git commit -m "fix: resolve critical bug"

6. 将修复合并到主分支

git checkout master git merge hotfix/fix-bug

输出:Merge made by the ort strategy.

7. 删除修复分支

git branch -d hotfix/fix-bug

8. 切换回功能分支,继续开发

git checkout feature/login echo "数据库连接" >> login.py git add . && git commit -m "feat: add database connection"

9. 将功能分支合并到主分支(使用 --no-ff 保留分支历史)

git checkout master git merge --no-ff feature/login

会触发编辑器,输入合并提交信息

10. 使用 rebase 同步主分支更新

git checkout feature/login git rebase master

变基后,feature/login 的提交会移植到 master 最新提交之后

11. 处理变基中的冲突

如果冲突:

git status # 查看冲突文件

手动编辑冲突文件,删除冲突标记

git add <冲突文件> git rebase --continue # 继续变基

或 git rebase --abort 取消变基

12. 使用 stash 暂存工作区

git checkout feature/login echo "半成品代码" >> temp.py git stash # 暂存工作区 git checkout master # 切换分支处理紧急任务

... 处理紧急任务 ...

git checkout feature/login git stash pop # 恢复暂存的工作区

13. 查看分支图

git log --graph --oneline --all

输出分支合并和变基的历史图形

echo "分支管理完成!"

常见问题

Q1: merge 和 rebase 有什么区别?应该用哪个?

git merge 将两个分支的提交合并成一个合并提交,保留完整的分支历史,不会修改提交记录,适合团队协作和公共分支。git rebase 将当前分支的提交移植到目标分支之后,产生线性历史,但会重写提交记录。重要规则:不要对已推送到远程的提交进行 rebase,这会导致协作问题。

Q2: 如何删除远程分支?

本地删除分支后,远程分支需要用 git push origin --delete <分支名> 删除。或者在 GitHub/GitLab 网页上删除。建议使用 -d 而不是 -D 删除本地分支,Git 会防止误删未合并的分支。

Q3: 发生合并冲突怎么办?

冲突发生时,Git 会在文件中添加冲突标记(<<<<<<<、=======、>>>>>>>)。手动编辑文件,删除冲突标记并保留需要的代码,然后 git add <文件>git commit 完成合并。使用 git merge --abort 可以取消合并。

Q4: HEAD 是什么?如何利用它回退?

HEAD 是指向当前分支最新提交的指针。git checkout HEAD~1 可以查看上一个提交(分离 HEAD 状态)。git checkout -b <分支名> HEAD~3 可以基于倒数第3个提交创建新分支。

延伸阅读