用 git worktree 同时处理两条分支
场景
正在 feature/a 上改到一半,代码不能提交。此时线上出问题要立刻在 master 上修。传统做法是 git stash + checkout,回来再 stash pop —— 但 stash 容易混,尤其是有未跟踪文件和依赖安装的时候。
worktree 的做法
git worktree add ../proj-hotfix master
cd ../proj-hotfix
这样得到一个独立目录,检出的是 master,和原目录共享同一个 .git 对象库(不是 clone,不占双份历史)。
修完提交、推送,然后删掉:
git worktree remove ../proj-hotfix
和 clone 的区别
| worktree | clone | |
|---|---|---|
| 对象库 | 共享 | 独立两份 |
| 磁盘占用 | 只多一份工作区文件 | 多一份完整仓库 |
| 分支 | 不能检出同一分支两次 | 各自独立 |
| 适合 | 同一仓库多分支并行 | 完全独立的副本 |
"同一分支不能检出两次" 是硬限制。想在两个目录同时看同一个分支,worktree 做不到,那才需要 clone。
实际好用的两个场景
- 一边跑长任务一边改代码:在 worktree 里跑测试/构建,原目录继续写,互不干扰。
- 给别人 review:开一个 worktree 到目标分支,用编辑器完整打开,不用担心把当前工作搞乱。
清理
删目录不等于删记录。如果直接 rm -rf 掉了 worktree 目录,git worktree list 里会留下失效条目,用:
git worktree prune
清掉这些死引用。
本文为个人学习记录,可能存在错误或已过时,仅供参考。
← 返回笔记列表