Git Worktree实战:保留未提交改动,同时开分支修Bug

发布时间:2026/11/2 1:29:05

Git Worktree实战:保留未提交改动,同时开分支修Bug 代码改了一半暂时还不想提交却需要去另一个分支修问题。常见做法是先stash修完再恢复。这当然能用麻烦在于你得把当前现场收起来再重新找回来。Git Worktree 提供了另一种做法当前目录先留着再开一个目录处理另一个分支。两个任务各有自己的工作文件和暂存区你可以分别打开编辑器。下面用一个最小仓库演示。示例里的“修复”只是修改配置目的是看清 Git 的行为不涉及真实线上系统。命令在 Windows、PowerShell 7.5.4 和 Git 2.55.0.windows.5 下跑过。先做出一个切不走的现场找一个空目录执行下面的命令。演示会创建worktree-demo/shop-app不要放到已有项目里运行。mkdir worktree-demo cd worktree-demo git init-b main shop-app cd shop-app# 只设置这个演示仓库的提交身份git config--local user.nameWorktree Demogit config--local user.emaildemoexample.invalid(feature.searchoff,checkout.retries1)|Set-Contentapp.properties-Encoding utf8NoBOM git add app.properties git commit-minitial configurationgit branch feature/search# main 分支随后有了一次配置变更(feature.searchoff,checkout.retries3)|Set-Contentapp.properties-Encoding utf8NoBOM git add app.properties git commit-madjust checkout retries on main# 回到功能分支留下尚未提交的修改gitswitchfeature/search (feature.searchon,checkout.retries1)|Set-Contentapp.properties-Encoding utf8NoBOM git status--short--branch这时所在分支是feature/searchapp.properties有未提交的改动## feature/search M app.properties再执行git switch main会得到这段提示error: Your local changes to the following files would be overwritten by checkout: app.properties Please commit your changes or stash them before you switch branches. Aborting这里特意让两个分支修改同一个文件是为了稳定复现保护机制。并不是只要工作区不干净Git 就一定拒绝切分支会覆盖当前修改时它才会拦住这次操作。当前目录不动给修复分支另开一个目录仍在shop-app中执行git worktree add-b fix/checkout../shop-hotfix main git worktree list这条命令里main是新分支的起点fix/checkout是要创建的分支../shop-hotfix是它的工作目录。如果分支已经存在才使用不带-b的写法例如git worktree add ../shop-hotfix fix/checkout。不要混用前一种创建分支后一种检出已有分支。此时目录关系是这样6秒原创机制示意动画。工作文件、暂存区和 HEAD 各自独立对象库与大部分引用共享动画按实验中的目录关系绘制。分别查看两个目录中的配置Get-Content./app.propertiesGet-Content../shop-hotfix/app.properties本次实验中前者是feature.searchon、checkout.retries1后者是feature.searchoff、checkout.retries3。原目录的功能改动还在新目录拿到的是main那份已提交的内容。现在就可以用 IDEA 或其他编辑器打开shop-hotfix。两个目录都能继续操作不必先把功能分支里的半成品塞进一次临时提交。修完后别忘了把提交交回主线下面继续修改演示配置并在修复分支提交(feature.searchoff,checkout.retries4)|Set-Content../shop-hotfix/app.properties-Encoding utf8NoBOM git-C../shop-hotfix add app.properties git-C../shop-hotfix commit-mfix checkout retry limitgit status--short--branch最后一个命令查看的仍是原来的shop-app。它依然显示feature/search和那处未提交修改。修复提交已经在fix/checkout上但不会因此自动进入main。本次真实 VS Code 截图。左侧是功能分支保留的修改右侧是已将重试次数改为 4 并提交的修复目录侧栏的名称用于区分两个工作目录。实际项目还是要走团队原有的评审、合并和测试流程。Worktree 帮你安排工作目录不能替你决定合并什么。用完可以移除目录分支还在先确认修复目录里的改动已经妥善处理git-C../shop-hotfix status--short--branch git worktree remove../shop-hotfix git worktree list git branch--list本次实验中移除后只剩shop-app这个工作目录fix/checkout分支和刚才的提交仍然存在。移除 Worktree 不等于删除分支。remove默认也会检查未提交修改和未跟踪文件。遇到拒绝移除先去看git status不要为了省一步直接加--force。这个演示最后保留了原目录的未提交修改方便继续核对它没有被清理命令顺手抹掉。“各开一个目录”也有边界每个 Worktree 有自己的工作文件、暂存区和HEAD但它们属于同一个仓库共享对象库和大部分引用。默认情况下同一分支已经被一个 Worktree 使用另一个就不能再检出它。本次尝试再次检出feature/search时Git 返回了already used by worktree。这也是为什么给多个 AI 编程任务分目录时应该给它们安排不同分支并明确谁负责最后合并。目录分开并没有消除代码层面的冲突。运行环境也要另外安排。两个 Spring Boot 项目如果都监听同一个端口还是会冲突连接同一个数据库也可能改到同一份数据。依赖目录和构建产物通常还要分别准备不能把 Worktree 当成容器。如果只是临时离开几分钟stash很顺手。如果两个任务需要并排看代码、来回调试或者要让多个 Agent 分头改不同功能再开 Worktree 会更合适。判断的依据是你是否需要同时保留两个工作现场。修订于2026年11月1日补完整最小仓库、失败与收尾结果、真实IDE截图和原创关系动画并区分工作目录与运行环境隔离。参考Git 官方 git-worktree 文档。
延伸阅读

更多相关文章

2026/11/2 2:34:34

Windows桌面拖拽失效的底层原理与精准修复方案

1. 问题本质与真实场景还原 “桌面文件和图片拖动不了了”——这句话在日常办公、设计、教学、内容创作等几乎所有依赖图形界面操作的场景中,都可能突然出现。它不是某个特定软件的报错,而是一种系统级交互失灵:鼠标左键按住图标后无法移动&…

2026/11/2 2:34:34

Occupancy技术演进:从基础统计到智能决策的十年变革

1. 项目概述:Occupancy概念的十年变迁Occupancy(占用率/入住率)这个看似简单的指标,在过去十年间经历了从基础统计工具到核心决策依据的蜕变。最初它只是酒店前台手写登记簿上的数字,如今已成为融合物联网、大数据和人…

2026/11/2 2:34:34

习惯养成关键期:第16天打卡系统的设计与优化

1. 项目背景与核心价值"第十六天打卡"这个看似简单的标题背后,隐藏着现代人自我管理的重要需求。在行为心理学研究中,连续21天的重复行为可以初步形成习惯,而第16天正处于习惯养成的关键突破期。这个阶段最容易出现"习惯倦怠&…

2026/11/2 2:34:34

Cursor Skills体系:从代码补全到工程化智能开发

1. 从聊天到做事:Cursor Skills体系的本质差异第一次接触Cursor时,我和大多数人一样,把它当作一个更聪明的代码补全工具。输入问题,得到回答,复制粘贴代码片段——这种"聊天式"交互确实能解决一些简单问题。…

2026/11/2 2:34:34

AI论文写作工具测评:提升学术效率的9款利器

1. 论文写作工具测评背景与价值去年指导本科生论文时,我发现超过80%的学生还在用传统方式收集文献——手动下载PDF、用Word做批注、靠记忆整理参考文献。这种低效方式导致他们平均要花费2-3周在文献准备阶段,而核心写作时间却被严重压缩。更糟的是&#…

2026/11/2 2:29:34

srcdoc polyfill实战:iframe内容预览的兼容性方案

1. 为什么还要折腾srcdoc这个属性第一次在项目里碰到srcdoc是在做一个内容预览模块,需求很朴素:用户在编辑器里写一段 HTML,右侧实时渲染出效果,而且这段 HTML 必须和主页面完全隔离,样式不能互相污染,脚本…

2026/11/1 0:01:26

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/1 1:01:33

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 1:04:04

工业级SPI隔离设计:硬件抗扰与信号完整性实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 1:04:04

PLFM_RADAR:主动探测数据通道,构建低误报的数据感知系统

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 1:04:04

工业SPI隔离设计:MAX14431与STM32F746硬件抗干扰实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/1 0:01:26

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/1 1:01:33

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑