使用 `git worktree` 管理多个工作目录,比 `git stash` 更高级的分支管理方式

简介

git worktree 是 Git 提供的一个子命令,允许在一个仓库中创建多个额外的工作目录(工作树),每个目录可关联一个独立的分支,从而实现多个分支的并行开发,无需频繁切换分支或使用 git stash 暂存。


常见用途

用途 命令
添加一个工作目录用于新分支 git worktree add ../feature-dir feature-branch
列出当前所有 worktree git worktree list
删除 worktree(不会删除分支) git worktree remove ../feature-dir

示例:并行开发多个分支

bash 复制代码
# 进入项目目录
cd my-project

# 为 feature/login 创建一个工作目录
git worktree add ../my-project-login feature/login

# 为 bugfix/crash 创建另一个工作目录
git worktree add ../my-project-crash bugfix/crash

此后你可在使用命令行/IDE在两个目录中分别独立开发、提交,互不干扰。


git stash 对比

功能/特性 git stash git worktree
作用 暂存当前更改,快速切分支 管理多个工作目录并行开发多个分支
多分支并行开发支持 否,仅能切换一个分支 是,每个工作目录一个分支
文件状态保存方式 储存在 stash 栈中 实际存在于多个工作目录
推荐使用场景 快速临时切换分支,不希望提交当前更改 长期并行开发多个特性/修复任务

与复制项目文件夹的对比

功能/特性 git worktree 复制文件夹(cp -r
Git 支持 原生支持,多个工作目录共享 .git 数据 每个目录都是独立 Git 仓库副本,彼此无关
空间占用 小,.git 数据不重复,源码为主 大,.git 和代码文件全部复制
分支独立性 高,每个目录可以检出独立分支 分支也可独立,但管理多个仓库代价更高
恢复安全性 强,误删工作目录后可从主仓库恢复 弱,误删后无直接恢复方式(需备份)
推荐用途 推荐用于 Git 管理内的并行协作开发 推荐用于导出/迁移到其他非 Git 管理环境或测试

存储空间大小说明

使用 git worktree 创建的目录非常轻量,结构如下:

  • 新目录中 .git 实际是一个指向主仓库 .git/worktrees/xxx 的文件;
  • 所有 Git 对象(如提交历史、快照)依旧存储在主仓库中;
  • 每个工作目录仅包含源码文件,没有重复的 Git 对象副本。

查看大小示例:

bash 复制代码
# 查看主仓库的 Git 数据大小
du -sh .git

# 查看 worktree 的目录大小(一般仅为代码文件大小)
du -sh ../my-project-login

对比复制项目文件夹,git worktree 占用空间更小、效率更高。


误删 worktree 目录后的恢复方法

如果误删了某个 worktree 目录,例如:

bash 复制代码
rm -rf ../my-project-login

执行 git worktree list 会看到如下异常:

bash 复制代码
/path/to/my-project        [main]
../my-project-login        (error)

恢复流程:

  1. 清理 Git 内部的无效记录

    复制代码
    git worktree prune

    这将移除 .git/worktrees/ 下失效的引用,清理异常状态。

  2. 重新添加工作目录

    若对应分支仍存在:

    bash 复制代码
    git worktree add ../my-project-login feature/login

    即可重新创建并恢复该目录。


使用建议

删除工作目录前,请始终使用 git worktree remove <dir>,确保主仓库中不残留失效引用,避免后续 Git 报错。

相关推荐
影视飓风TIM5 小时前
Linux下C语言缓冲区原理 + Git版本控制
linux·c语言·git
tianyuanwo11 小时前
当提交标题重复阻塞CI:Git分支修复实战
git·ci/cd·分支基线调整
Salt & Light11 小时前
Git 分支操作与恢复完整记录
git
重生的黑客12 小时前
从远程仓库到企业级协作:Git push、pull、PR、多人开发与分支模型
git·分支·多人协作
tianyu23414 小时前
Git 常用命令完整手册
git·版本控制·常用命令
gwf2161 天前
SSD读写速度深度解析:顺序读写vs随机读写、IOPS、延迟,你的硬盘性能到底怎么看?
git·嵌入式硬件·缓存·github·智能硬件
西邮彭于晏1 天前
图文详解:Git分支创建、合并与冲突解决|新手零门槛完整教程
大数据·git·elasticsearch
nuisthou1 天前
git常用命令总结
git
西邮彭于晏1 天前
Git 标签(Tag)与版本发布完整指南|附全场景命令速查表
大数据·git·elasticsearch
潘正翔1 天前
k8s进阶_Harbor镜像仓库
git·云原生·容器·kubernetes·gitee·github