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

推荐订阅源

WordPress大学
WordPress大学
B
Blog
M
MIT News - Artificial intelligence
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
P
Proofpoint News Feed
C
Check Point Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
J
Java Code Geeks
博客园 - 叶小钗
S
SegmentFault 最新的问题
Last Week in AI
Last Week in AI
T
The Blog of Author Tim Ferriss
Microsoft Security Blog
Microsoft Security Blog
小众软件
小众软件
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 【当耐特】
腾讯CDC
博客园 - Franky
博客园 - 聂微东
V
Visual Studio Blog
GbyAI
GbyAI
Martin Fowler
Martin Fowler
罗磊的独立博客
Y
Y Combinator Blog

Nicksxs's Blog

Pi Agent 源码解析(一):从调试环境到双层主循环 6GB显存能跑35B MoE吗:FreeToken极限配置、性能压榨与实操教程 聊聊 Java 的类加载机制一 从ASM到ByteKit再到Arthas:一条Java字节码增强链路 8GB显存如何跑35B:深入理解FreeToken的专家缓存与CPU-GPU协同 让chatgpt来给我讲解下deepseek harness的插件体系 来学习下pi agent的原理 如何在命令行中输出进度条 联想 G400 安装 Windows 7 折腾记录 记一个gitea推送失败的问题 学一下chrome的扩展开发 看下chrome的内置模型 从 app.test 到小锁:valet 本地 HTTPS 的完整链路 浅析一下jpeg图片格式及其来源 关于github拉取下载加速的另一个方式 关于适合什么模型,推荐下llmfit 看看目前本地能跑什么模型,使用llama.cpp 最近使用vibe coding的一些感悟 使用php的inotify扩展来监听文件变更 一些设计模式的记忆点 使用xiaomi mimo大模型api运行Hermes Agent 结合Obsidian的cli的一体化体验 开始尝试使用obsidian作为笔记软件 学习下大神的知识库 体验下微软开源的Markdown转换工具Markitdown 一些架构师知识点的记录 解答一下关于traefik的一点疑惑 记录一下迁移服务器需要使用的一些命令 较早代iPhone更换新iPhone的一些小指南 如何查看mac的路由表和网关等信息
学习下git的worktree
Nicksxs · 2026-03-29 · via Nicksxs's Blog

我们在开发中还是有挺多时候会需要经常切换分支,比如在项目A的过程中突然要修个bug,或者想去看看另一个分支的代码逻辑是怎么样的等等
如果频繁的切换分支,那要不就是经常git stash,有时候甚至会忘了已经开发了的代码,要不就是写到一半提交
最近发现了worktree这个功能,
比如我有一个仓库叫repo0,有两个分支main和feat1,
我可能需要在feat1上开发,但是偶尔又要回main上看看代码逻辑等
我就可以使用worktree,
比如我就是创建一个feat1的worktree

1
git worktree add ../feat1 feat1

就会在repo0的同级目录创建一个feat1
这样就会变成两个目录对应的不同分支,但优点是啥呢,因为这是git天然支持的,不是我们直接clone了两份,会有两个.git目录,这样就省掉了很大的版本管理空间
另外我们仓库路径下就是个主的worktree
这样呢其实还有一个现在比较时兴的好处,就是如果有多个agent,就可以开多个worktree,一个开发新代码,一个写单测,一个review代码,加快流水线并行化速度
对应的常用参数可以看一下help

1
2
3
4
5
6
7
8
9
usage: git worktree add [-f] [--detach] [--checkout] [--lock [--reason <string>]]
[-b <new-branch>] <path> [<commit-ish>]
or: git worktree list [-v | --porcelain [-z]]
or: git worktree lock [--reason <string>] <worktree>
or: git worktree move <worktree> <new-path>
or: git worktree prune [-n] [-v] [--expire <expire>]
or: git worktree remove [-f] <worktree>
or: git worktree repair [<path>...]
or: git worktree unlock <worktree>

第一个就是add,像我刚才就是指定了worktree的路径和对应的分支,如果直接是路径就会找这个路径名对应的分支,如果不存在跟路径同名的分支,就是新建分支
而如果后面是分支名,就会切到这个分支,它还可以是tag,commit-id;
还有比如我只是想做一些实验性的改动
可以用

add命令

1
git worktree add -d <path>

它不会新建分支,创建一个不与任何分支关联的 throwaway worktree(一次性工作树)。

list命令

1
git worktree list

另外像git worktree list就是查看当前仓库有哪些worktree

lock命令

1
git worktree lock

lock是说我的worktree可能会被移动,防止文件被破坏,我需要进行锁定

move命令

1
git worktree move <worktree> <new-path>

move就是把worktree移动到一个新的路径

remove命令

1
git worktree remove

remove就是删除worktree,
但有个前提是不能删除还有代码没提交,有未提交的变更这种

prune命令

1
git worktree prune

这个其实更偏向于git来清理所管理的worktree,比如worktree的目录直接被删掉不用了

repair命令

1
git worktree repair 

修复命令是指比如我们的主worktree被移动了,
那需要修复其他的worktree的引用关系
就可以用这个命令

unlock命令

1
git worktree unlock 

这个跟刚才的lock就是互为反操作
如果对一个仓库有这种多分支并行操作,
用worktree还是挺好用的
之前还不知道,最近是跟着最新这波龙虾热才知道
想要搞个数字团队
分工各司其职
正好可以用到这个功能