Git | 分支管理操作

基本概念

概念
  • 分支指针 ------ 指向某个具体的提交,表示该分支的最新状态 (如 masterdev
    • 可移动:每次在分支提交代码,分支指针会自动向前移动
  • HEAD 指针 ------ 指向当前位置所在分支的最新提交,表示"正在哪个分支上工作 "
    • 临时性:HEAD 值随 git switchgit checkout 切换分支而改变
原理
初始状态
  • 一开始,master 分支是一条线,GitHEAD 指向 master ,用 master 指向最新的提交,确定当前分支 master 以及提交点
  • 每次提交,master 分支指针向前移动随着不断提交,master分支线越来越长
创建分支
  • 创建新分支 dev 时,Git 新建指针 dev,指向 master 相同提交,确定当前分支 dev 以及提交点
  • 每次 dev 分支提交,dev 指针向前移动,master 指针不变
快速合并 fast-forward
  • 情况dev 分支有新提交 ,而 master 主分支无新提交,提交结构是一条线
  • 操作 :直接让 master 指向 dev 的当前提交,HEAD 指针指向 master ,完成合并
非快速合并 not-fast-forward
  • 情况feature 分支、master 主分支各自有新的提交,提交结构不是一条线
  • 操作Git无法执行快速合并,只能试图把各自的修改合并起来
  • 冲突解决 :合并时如果两个分支对同一个文件都有修改,可能产生冲突,需打开冲突文件解决冲突

指令介绍

分支创建\查看\删除\重命名 git branch
  • 语法

    sh 复制代码
    git branch [<options>] <branch-name>  [--merged] [--no-merged]
    选项 功能
    -a / --all 显示所有分支,包括远程跟踪分支
    -d / --delete 删除已合并的分支(需已合并到当前分支)
    -D 强制删除分支(即使未合并)
    -m / --move 重命名当前分支
    -r / --remote 仅列出远程分支
    -v / --verbose 显示分支的详细信息(包括最后一次提交和跟踪关系)
    -vv 显示分支的详细跟踪信息
    --no-merged 显示未合并的分支
    --merged 显示已合并的分支
  • 具体示例

    • 查看分支情况

      sh 复制代码
      $ git branch		# 查看本地分支
      $ git branch -a	# 查看本地、远程的所有分支
    • 创建分支

      sh 复制代码
      $ git branch feature/login
    • 删除分支

      sh 复制代码
      $ git branch -d feature/login		# 删除已合并的分支
      $ git branch -D feature/login		# 强制删除未合并的分支
分支切换\创建\合并 git checkout
  • 语法

    sh 复制代码
    git checkout [<options>] [<branch>]
    参数 功能
    -b / --branch 创建新分支并切换(分支存在时报错)
    -B / --force-branch 强制创建/重置分支并切换(覆盖现有分支)
    -m / --merge 执行三方合并到新分支,保留未提交的更改
    -f / --force 强制切换,丢弃本地修改 (危险:会丢失未提交的更改)
    -2 / --ours 合并冲突时检出我方版本解决冲突
    -3 / --theirs 合并冲突时检出对方版本解决冲突
  • 具体示例

    • 切换分支

      sh 复制代码
      git checkout main			# 切换到已存在的分支
      git checkout -f feature		# 强制切换(丢弃工作区修改)
    • 创建分支

      sh 复制代码
      git checkout -b feature					# 从当前分支最新提交创建新分支
      git checkout -b feature abc123			# 从当前分支指定提交创建分支(分支不存在时报错)
      git checkout -B feature        			# 强制创建/重置分支(分支存在则重置)
    • 解决合并冲突

      sh 复制代码
      git checkout --ours conflicted-file.js		# 保留当前分支的版本(--ours)
      git checkout --theirs conflicted-file.js	# 保留合并分支的版本(--theirs)
专用分支切换 git switch

专门用于切换分支,由 Git 2.23 引入,替代 git checkout 的分支操作相关功能,在功能上等价

  • 语法

    sh 复制代码
    git switch [<options>] [<branch>]
    参数 功能
    -c / --create 创建新分支并切换(分支存在时报错)
    -C / --force-create 强制创建/重置分支并切换(覆盖现有分支)
    -m / --merge 执行三方合并切换到新分支
    -f / --force 强制切换,丢弃本地修改 (危险:会丢失未提交的更改)
  • 具体示例

    • 切换分支

      sh 复制代码
      git switch main			# 切换到已存在的分支
      git switch -f feature		# 强制切换(丢弃工作区修改)
    • 创建分支

      sh 复制代码
      git switch -c feature				# 从当前分支最新提交创建新分支
      git switch -c feature abc123			# 从当前分支指定提交创建分支(分支不存在时报错)
      git switch -C feature        			# 强制创建/重置分支(分支存在则重置)
  • 区分 ------ 几种不同的创建分支指令

    命令 功能 分支存在时的行为 是否切换 使用场景
    git branch feature 仅创建分支 报错 ❌ 不切换 后台创建,稍后使用
    git checkout -b featuregit switch -c feature 创建并切换 报错 ✅ 切换 标准工作流
    git checkout -B featuregit switch -C feature 创建/重置并切换 重置覆盖 ✅ 切换 修复/重做分支
分支合并 git merge
  • 语法

    sh 复制代码
    git merge [<options>] [<commit>...]
    选项 功能
    --no-ff / --no-fast-forward 禁用快进合并,强制生成合并提交
    --ff-only / --fast-forward-only 仅允许快进合并,否则失败
    -m / --message 指定合并提交的消息(与 --no-ff 一起用)
    --no-commit 执行合并但不自动提交,可以调整合并结果
  • 具体示例

    • 合并 feature/login 到当前分支

      bash 复制代码
      git merge feature/login
    • 禁用快进合并(保留合并历史)

      bash 复制代码
      git merge --no-ff feature/login
    • 仅允许快进合并(否则报错)

      bash 复制代码
      git merge --ff-only feature/login
    • 解决冲突后继续合并

      bash 复制代码
      git merge --continue

分支管理

相关指令
  • git branch ------ 创建、查看、删除、重命名分支

  • git checkout ------ 切换、创建分支

  • git switch ------ 专用切换分支(替代 checkout

实操
  • 创建分支

    sh 复制代码
    $ git branch new-feature
  • 创建并切换到新分支

    sh 复制代码
    $ git checkout -b new-feature
    $ git switch -c new-feature		# 或使用较新的 git 版本中的命令
    Switched to a new branch 'new-feature'
  • 切换分支

    sh 复制代码
    $ git checkout main
    $ git switch main				# 或使用较新的 git 版本中的命令
    Switched to branch 'main'
    Your branch is up to date with 'origin/main'.
  • 查看分支

    sh 复制代码
    $ git branch
      develop
      feature/login
    * main				 # 带星号 * 表示当前所在分支
      new-feature
  • 安全删除已合并的分支

    sh 复制代码
    $ git branch -d develop
    Deleted branch develop (was abc1234).
  • 强制删除未合并的分支

    sh 复制代码
    $ git branch -D develop
    warning: Deleting branch 'develop' that has not been merged.
    Deleted branch experimental (was def5678).

分支合并

相关指令
  • git merge ------ 将指定分支的提交合并到当前分支
场景一:快速合并
  1. 初始状态 ------ 创建并切换分支 dev,查看当前分支情况

    sh 复制代码
    $ git checkout -b dev
    Switched to a new branch 'dev'
    sh 复制代码
    $ git branch
    * dev
      master
  2. 修改文件 ------ 在 dev 分支上修改 readme.txt 文件并提交

    sh 复制代码
    $ git add readme.txt 
    sh 复制代码
    $ git commit -m "branch test"
    [dev b17d20e] branch test
     1 file changed, 1 insertion(+)
  3. 快速合并 ------ 切换回 master 分支,把 dev 分支的工作成果合并到 master 分支上

    sh 复制代码
    $ git checkout master
    Switched to branch 'master'
    sh 复制代码
    $ git merge dev
    Updating d46f35e..b17d20e
    Fast-forward
     readme.txt | 1 +
     1 file changed, 1 insertion(+)
  4. 删除分支 ------ 合并完成,可放心地删除 dev 分支

    sh 复制代码
    $ git branch -d dev
    Deleted branch dev (was b17d20e).
场景二:非快速合并
  1. feature 分支操作 ------ 创建并切换分支 feature,修改 readme.txt 文件并提交

    sh 复制代码
    $ git switch -c feature
    Switched to a new branch 'feature'
    sh 复制代码
    # feature 分支上的 readme.txt 最后一行改为:
    Modify on feature for merge test.
    sh 复制代码
    $ git add readme.txt
    sh 复制代码
    $ git commit -m "Feature modify"
    [feature 14096d0] Feature modify
     1 file changed, 1 insertion(+), 1 deletion(-)
  2. master 分支操作 ------ 切换分支 master,再次修改 readme.txt 文件并提交

    sh 复制代码
    $ git switch master
    Switched to branch 'master'
    Your branch is ahead of 'origin/master' by 1 commit.
      (use "git push" to publish your local commits)
    sh 复制代码
    # master 分支上 readme.txt 最后一行改为:
    Modify on master for merge test.
    sh 复制代码
    $ git add readme.txt 
    sh 复制代码
    $ git commit -m "Master modify"
    [master 5dc6824] Master modify
     1 file changed, 1 insertion(+), 1 deletion(-)
  3. 直接尝试合并 ------ 提交分支存在"分叉",这种情况下不同分支上的文件可能会产生冲突,无法快速合并

    sh 复制代码
    $ git merge feature
    Auto-merging readme.txt
    CONFLICT (content): Merge conflict in readme.txt
    Automatic merge failed; fix conflicts and then commit the result.

    Git 提示:两个分支的 readme.txt 文件存在冲突,必须手动解决冲突后再提交

  4. 解决冲突后再合并

    • 查看冲突 ------ 输入命令 git status 查看冲突文件

      sh 复制代码
      $ git status
      On branch master
      Your branch is ahead of 'origin/master' by 2 commits.
        (use "git push" to publish your local commits)
      
      You have unmerged paths.
        (fix conflicts and run "git commit")
        (use "git merge --abort" to abort the merge)
      
      Unmerged paths:
        (use "git add <file>..." to mark resolution)
      
      	both modified:   readme.txt
      
      no changes added to commit (use "git add" and/or "git commit -a")
    • 手动解决冲突 ------ 查看 readme.txt,手动解决冲突

      sh 复制代码
      $ cat readme.txt
      Hello word!
      <<<<<<< HEAD
      Modify on master for merge test.
      =======
      Modify on feature for merge test.
      >>>>>>> feature

      Git 提示 :用<<<<<<<=======>>>>>>>标记出不同分支内容

      sh 复制代码
      $ cat readme.txt
      Hello word!
      Modify on feature for merge test.
    • 提交合并

      sh 复制代码
      $ git add readme.txt 
      $ git commit -m "conflict fixed"
      [master cf810e4] conflict fixed
    • 删除分支 ------ 合并完成,可放心地删除 feature 分支

      sh 复制代码
      $ git branch -d feature
      Deleted branch feature (was 14096d0).
场景三:查看分支合并情况
  • 输入带参数的 git log 指令查看分支合并情况

    sh 复制代码
    $ git log --graph --pretty=oneline --abbrev-commit
    *   cf810e4 (HEAD -> master) conflict fixed
    |\  
    | * 14096d0 (feature1) Feature Modify
    * | 5dc6824 Master modify
    |/  
    * b17d20e branch test
    * d46f35e (origin/master) remove test.txt
    * b84166e add test.txt
    * 519219b git tracks changes
    * e43a48b understand how stage works
    * 1094adb append GPL
    * e475afc add distributed
    * eaadf4e wrote a readme file

分支策略

合并策略
  • 合并时启用 Fast-Forward(默认模式)

    sh 复制代码
    git merge -m "merge message" dev
    • 适用 ------ 当目标分支(如 master)是待合并分支(如 dev)的直接祖先时
    • 行为
      • 合并后历史呈直线,无法保留分支的拓扑信息
      • 删除分支后,无法从历史中看出曾存在过分支,不便于追踪代码来源
  • 合并时禁用 Fast-Forward(参数 --no-ff

    sh 复制代码
    git merge --no-ff -m "merge message" dev
    • 适用 ------ 即使满足 Fast-Forward 条件,也会创建一个新的合并提交
    • 行为
      • 保留分支的拓扑结构,从历史中清晰看出分支的存在和合并点
      • 适合团队协作,便于追踪代码来源
  • 策略

    场景 推荐 原因
    个人本地分支合并 Fast-Forward 简化历史,避免冗余提交
    团队协作分支合并 --no-ff 保留分支信息,便于追踪代码变更
    需要明确记录合并操作 --no-ff 合并提交提供上下文(如版本发布)
管理策略
分支 作用 说明
主分支 (master/main 生产环境的 稳定分支 - 仅用于发布正式版本,禁止直接提交代码 - 必须通过合并其他分支(如 dev)来更新 - 代码始终处于可部署状态
开发分支 (dev 集成团队代码的 协作分支 - 所有开发者的功能分支均合并到此处 - 允许存在未完成的代码,但需通过测试后再合并到 master - 定期同步以避免冲突
个人/功能分支 (如 feature/login 开发者独立工作的 开发分支 - 基于 dev 分支创建,命名需清晰(如 feature/xxxfix/xxx) - 开发完成后通过 Pull Request(PR)Merge Request(MR) 合并到 dev - 避免长期存在,及时删除已合并的分支

相关推荐
KaneLogger9 小时前
OpenCode 操作手册
git
木子小喵9 小时前
通俗讲解Git安装每一步!!
git
IOT那些事儿10 小时前
TortoiseGit拉取开源子仓库失败
git·ssh·tortoisegit·submodule
whysqwhw11 小时前
Android Kotlin MVVM与MVI组合场景
github
不想看见40411 小时前
Git的多种仓库选择与推荐
git
whysqwhw12 小时前
MVI架构核心设计思想及实际项目应用总结
github
CoderJia程序员甲12 小时前
GitHub 热榜项目 - 日榜(2026-03-29)
人工智能·ai·大模型·github·ai教程
攀登的牵牛花13 小时前
程序员失业论,被 SWE-CI 一组数据打醒:真正先被替代的是低质量交付
前端·github
cyforkk13 小时前
Java 开源项目指南:如何规范地发布首个 GitHub Release
java·开源·github
信创DevOps先锋13 小时前
中国DevOps工具链选型新趋势:合规、协同与生态融合的平衡之道
运维·gitee·devops