惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
IT之家
IT之家
博客园 - Franky
Stack Overflow Blog
Stack Overflow Blog
宝玉的分享
宝玉的分享
Recent Announcements
Recent Announcements
Engineering at Meta
Engineering at Meta
S
SegmentFault 最新的问题
V
Visual Studio Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Last Week in AI
Last Week in AI
H
Help Net Security
V
V2EX
H
Hackread – Cybersecurity News, Data Breaches, AI and More
量子位
博客园 - 叶小钗
J
Java Code Geeks
博客园 - 【当耐特】
月光博客
月光博客
爱范儿
爱范儿
人人都是产品经理
人人都是产品经理
酷 壳 – CoolShell
酷 壳 – CoolShell
小众软件
小众软件

博客园 - Lemo_wd

flutter —— iOS 的构建与分发 flutter —— 理解 iOS 的依赖管理 wireguard 入门 k3s 基础 —— 将 traefik 替换为 ingress-nginx Pr 入门 为什么 TCP 是3次握手4次挥手? 给 ssh 私钥文件配置统一口令 滚动部署零碎笔记1 Clickhouse 物化视图与投影 Clickhouse 主键索引 Clickhouse 核心概念 ClickHouse 案例学习 —— 使用 ClickHouse 探索 GitHub 统计信息 linux Tun/Tap 虚拟网卡 Clickhouse 的 kafka Engine 集成 Clickhouse 表引擎 —— MergeTree 局域网中的设备间的流量转发 d3.js 构建股权架构图并绘制双向节点树 final cut pro 入门 d3.js 构建股权架构图并绘制股权百分比 flutter 的滚动控制 —— 滚动类组件的内部与整体滚动
git worktree 的入门
Lemo_wd · 2026-08-22 · via 博客园 - Lemo_wd

概念:关联工作树

  1. 主工作树:拥有完整的 .git/ 文件夹,里面存着整个项目的所有 commit 历史、分支引用、配置信息、缓存对象等。

  2. 关联工作树:里面只有一个纯文本文件 .git(可以用 cat .git 查看),里面只写了一行路径。

gitdir: /Users/dev/my-project/.git/worktrees/feat-payment

关联工作树开发完随时可以用 git worktree remove 移除,删了对项目历史没有任何破坏。

点击查看图片

download

使用场景

场景1:当前分支还在更新,此时需要切到另一个分支执行某个紧急修复。

传统解法:
直接将当前更新内容提交一个新记录,或者 git stash。再 git switch 到该分支进行修复。

新解法:
基于该分支(需要紧急修复的分支)创建一个关联工作树,保存到某个子目录中,进入到该子目录进行修改或提交代码。解决完成后可以直接删除该子目录。

创建关联工作树

1. 基于已有分支创建工作树

git worktree add <路径> <已有分支>

2.基于已有 commit hash(或分支)创建新分支工作树

git worktree add -b <新分支> <路径> <Commit/Tag/分支>

① 新建工作树必须要绑定分支,除非创建游离工作树(相当于直接拷贝目录,不能执行 pull merge 等操作)

② 一个分支最多只能挂载一个关联工作树。

# 举例1:先创建关联工作树,再回到主工作树切换到同一个分支,报错

# 先开了一个新目录绑定了 b1
git worktree add ../dir-b1 b1

# 在原来的主目录里执行 git switch
git switch b1

fatal: 'feat-login' is already checked out at '/path/to/dir-login'

# 举例2: 当前已经是分支b1,再基于b1创建关联工作树,报错
git worktree add ../dir-b1 b1

3. 基于已有 commit hash(或分支)创建游离工作树

git worktree add -d <路径> <Commit/Tag/分支>