Git | Bug分支操作

基本概念

BUG 分支是通过创建临时分支独立修复问题 ,结合 git stash 暂存未完成工作git cherry-pick 跨分支复用修复,实现紧急修复不中断主开发流程的工作模式

原则
  • 隔离修复 ------ 每个 Bug 应该通过独立临时分支(如 issue-xxx)进行修复,避免污染主分支
  • 灵活切换 ------ 可以使用 git stash 保存未完成的工作现场,随时应对紧急任务
  • 高效复用 ------ 可以使用 cherry-pick 跨分支复制修复提交,避免重复劳动
原理
初始状态
  • 一开始,master 分支上的代码存在 bugdev 分支通过 master 创建新分支继承了该 bug
  • 当前处于 dev 分支进行工作,存在未完成的工作
dev 分支暂存工作
  • dev 分支在切换到 master 分支修复 Bug 前,暂存未完成的工作,避免丢失

master 分支修复 Bug 并合并
  • 切换到 master 分支,创建 issue-101 临时分支进行 Bug 修复工作
  • issue-101 临时分支修复 Bug 后,合并到 master 分支,并删除临时分支
dev 分支恢复工作,拉取 master 修复成果
  • master 分支修复 Bug 后,切换回 dev 分支,恢复未完成的工作
  • 拉取 master 分支上修复 Bug 的成果到 dev 分支

指令介绍

暂存未提交修改 git stash
  • 功能 ------ 暂存当前工作目录暂存区的未提交修改,以便后续恢复继续工作

  • 场景 ------ 在切换分支前保存半成品工作

  • 语法

    sh 复制代码
    git stash [<subcommand>] [<options>] [<arguments>]
    子命令 subcommand 功能描述 语法示例 常用选项
    save 保存当前修改到暂存栈 git stash save "message" -u, -a, -p
    list 查看暂存栈列表 git stash list -
    show 显示暂存的具体修改 git stash show stash@{n} -p
    apply 恢复暂存但不删除记录 git stash apply stash@{n} --index
    pop 恢复暂存并删除记录 git stash pop stash@{n} --index
    drop 删除指定暂存记录 git stash drop stash@{n} -
    clear 清空整个暂存栈 git stash clear -
  • 具体示例

    • 保存暂存 ------ 默认子操作 save

      sh 复制代码
      $ git stash -a "WIP: 开发登录功能"		# 保存所有文件(包括 .gitignore 忽略的文件)
      $ git stash -u "WIP: 开发登录功能"		# 仅保存未跟踪的文件(新增但未 git add 的文件)
    • 查看暂存列表 ------ 子操作 list

      bash 复制代码
      $ git stash list
      stash@{0}: On dev: WIP: 开发登录功能
      stash@{1}: On master: 紧急调试
    • 恢复指定暂存 ------ 子操作 apply / pop(注意:仅恢复,不会删除记录)

      sh 复制代码
      $ git stash apply stash@{0}
    • 删除指定暂存 ------ 子操作 drop / clear

      bash 复制代码
      $ git stash drop stash@{0}			# 删除指定暂存记录
      $ git stash clear					# 清空整个暂存栈
    • 恢复并删除最近暂存 ------ 子操作 pop

      bash 复制代码
      $ git stash pop
复制指定提交到分支 git cherry-pick
  • 功能 ------ 复制特定提交到当前分支,避免重复修改

  • 场景 ------ 跨分支复用 Bug 修复或功能提交

  • 语法

    sh 复制代码
    git cherry-pick [<options>] <commit-id>
    选项 功能描述
    -n / --no-commit 只应用修改,不自动提交(需手动 git commit
    -x 在提交信息中追加来源提交的哈希(便于追踪)
    --continue 继续当前 cherry-pick 操作(冲突时使用)
    --abort 取消当前 cherry-pick 操作(冲突时使用)
  • 具体示例

    • 复制单个提交 ------ 从 master 分支复制 Bug 修复提交到 dev

      sh 复制代码
      $ git switch dev					# 切换到 dev 分支
      $ git cherry-pick 4c805e2  			# 复制哈希值 4c805e2 的提交
    • 复制多个提交

      SH 复制代码
      $ git cherry-pick 4c805e2 7d9f3a1  	# 按顺序应用提交
    • 复制提交但不自动提交

      sh 复制代码
      $ git cherry-pick -n 4c805e2  		# 修改应用到工作区,需手动提交
      $ git commit -m "手动提交修复"
    • 复制提交时发生冲突

      • 方法一:手动解决冲突文件

      • 方法二:标记冲突已解决

        sh 复制代码
        $ git add 冲突文件
        $ git cherry-pick --continue
      • 方法三:取消操作

        sh 复制代码
        $ git cherry-pick --abort

Bug 分支使用

相关指令
  • git stash ------ 暂存未提交修改
  • git cherry-pick ------ 复制指定提交到分支
场景一:正在 dev 分支开发新功能,突然紧急修复 master 分支的 Bug 101,且当前分支的工作未完成无法提交
  1. 暂存未完成工作 ------ 输入命令 git stash 暂存 dev 分支未完成工作

    sh 复制代码
    $ git stash					# 暂存工作
    Saved working directory and index state WIP on dev: f52c633 add merge
    sh 复制代码
    $ git stash list  				# 查看暂存记录(可选)
    stash@{0}: WIP on master: f52c633 add merge
  2. 修复 Bug ------ 切换到 master 分支,创建 issue-101 临时分支修复 Bug

    sh 复制代码
    $ git checkout master			# 切换到需修复的分支
    Switched to branch 'master'
    Your branch is ahead of 'origin/master' by 6 commits.
      (use "git push" to publish your local commits)
    sh 复制代码
    $ git checkout -b issue-101		# 创建并切换到修复分支
    Switched to a new branch 'issue-101'
    sh 复制代码
    # 修改 Bug...
    $ git add .
    $ git commit -m "fix bug 101"
  3. 合并临时分支 ------ 将 issue-101 临时分支合并到 master 分支

    sh 复制代码
    $ git switch master
    sh 复制代码
    $ git merge --no-ff -m "merged fix bug 101" issue-101  	# 保留合并记录
    sh 复制代码
    $ git branch -d issue-101       						# 删除临时分支
  4. 恢复开发环境 ------ 切换到 dev 分支,输入命令 git stash pop 恢复 dev 分支未完成工作

    sh 复制代码
    $ git switch dev                	# 回到原分支
    sh 复制代码
    $ git stash pop                 	# 恢复暂存的工作(自动删除 stash 记录)
    # 或手动恢复:
    $ git stash apply stash@{0}     	# 恢复指定暂存
    $ git stash drop stash@{0}      	# 删除暂存
  5. 同步修复 ------ 将 master 分支的修复同步到当前工作的 dev 分支

    sh 复制代码
    $ git cherry-pick 4c805e2
    [master 1d4b803] fix bug 101
     1 file changed, 1 insertion(+), 1 deletion(-)

相关推荐
AC赳赳老秦2 小时前
企业级人工智能平台选型深度分析:天翼云 DeepSeek 与开源解决方案的部署考量与成本博弈
人工智能·elasticsearch·zookeeper·rabbitmq·github·时序数据库·deepseek
小凡子空白在线学习2 小时前
Bug目录
bug
CoderJia程序员甲3 小时前
GitHub 热榜项目 - 日榜(2025-12-27)
ai·开源·大模型·github·ai教程
Rhys..4 小时前
Jenkins配置GitHub token教程
运维·github·jenkins·ci
-拟墨画扇-4 小时前
Git | Feature分支操作
git·gitee·github·gitcode
无限进步_4 小时前
C++多态全面解析:从概念到实现
开发语言·jvm·c++·ide·git·github·visual studio
无限进步_4 小时前
C++ STL容器适配器深度解析:stack、queue与priority_queue
开发语言·c++·ide·windows·算法·github·visual studio
henreash4 小时前
windows下git的hooks
git
无限进步_4 小时前
C++ STL list容器深度解析与模拟实现
开发语言·数据结构·c++·windows·git·list·visual studio