Git | Bug分支操作

基本概念

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

原则
  • 隔离修复 ------ 每个 Bug 应该通过独立临时分支(如 issue-xxx)进行修复,避免污染主分支
  • 灵活切换 ------ 可以使用 git stash 保存未完成的工作现场,随时应对紧急任务
  • 高效复用 ------ 可以使用 cherry-pick 跨分支复制修复提交,避免重复劳动
原理
初始状态
  • 一开始,master 分支上的代码存在 bug ,dev 分支通过 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(-)

相关推荐
Sakura_j_h_20 分钟前
EasyEDA PCB 快速设计Skills
c++·python·github
BIBI20492 小时前
换 Git 托管平台怎么做?基于 TortoiseGit 的跨平台迁移教程
windows·git·tortoisegit·问题解决·版本控制·最佳实践
wflynn4 小时前
GitHub 今日推荐|Edge0:让大号 MoE 模型在一台 Mac 上流式跑起来
python·开源·github
用户别睡觉5 小时前
五大 RAG 开源项目对比 2026:Dify、RAGFlow、FastGPT、AnythingLLM、LightRAG
github
用户7273744138845 小时前
在 Windows 11 上从零装好 Carapace BIN:一次真实操作记录
github
miofly6 小时前
Claude Sonnet 5自主选药选坐标完成小鼠脑部手术,更强模型拒绝执行
开源·github
塞讯科技7 小时前
13,500 个分支被植入窃密工作流:Gheist 如何用 GitHub 令牌搬走仓库密钥
网络安全·ai·github·软件供应链安全·供应链投毒
echome8889 小时前
Git 日常救急:撤销提交、找回误删文件和解决冲突
git·版本控制
阿智的AI开发笔记12 小时前
充了 200 块只跑出 3 条:AI 视频真正贵的地方,是「按次」和「按秒」的区别
github
GitHub实测笔记12 小时前
rtk 本机实测:给 AI Agent 砍掉 90% 的命令行噪音(Linux)
github