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

推荐订阅源

S
Secure Thoughts
月光博客
月光博客
Y
Y Combinator Blog
量子位
J
Java Code Geeks
The GitHub Blog
The GitHub Blog
MyScale Blog
MyScale Blog
aimingoo的专栏
aimingoo的专栏
Microsoft Azure Blog
Microsoft Azure Blog
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
罗磊的独立博客
Google DeepMind News
Google DeepMind News
大猫的无限游戏
大猫的无限游戏
M
MIT News - Artificial intelligence
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog
S
Schneier on Security
S
Security Affairs
Project Zero
Project Zero
L
LINUX DO - 热门话题
H
Hacker News: Front Page
Google Online Security Blog
Google Online Security Blog
L
Lohrmann on Cybersecurity
Latest news
Latest news
P
Palo Alto Networks Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
www.infosecurity-magazine.com
www.infosecurity-magazine.com
MongoDB | Blog
MongoDB | Blog
Blog — PlanetScale
Blog — PlanetScale
The Last Watchdog
The Last Watchdog
Help Net Security
Help Net Security
I
Intezer
The Register - Security
The Register - Security
小众软件
小众软件
C
Check Point Blog
NISL@THU
NISL@THU
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Tor Project blog
D
Docker
Hugging Face - Blog
Hugging Face - Blog
WordPress大学
WordPress大学
Forbes - Security
Forbes - Security
H
Hackread – Cybersecurity News, Data Breaches, AI and More
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
T
Tailwind CSS Blog
Security Latest
Security Latest
博客园 - 司徒正美
IT之家
IT之家

Nicksxs's Blog

记一个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的路由表和网关等信息 如何开启mysql的optimizer trace 浅析下mysql的索引的基数与可选择性 分享个加速github访问的方法 学习体验下Koupleless框架-浅析代码 学习体验下Koupleless框架 体验下nocodb这个神奇的系统 学习下MDC的机制 重新复习理解下java的类加载器 记录下ffmpeg命令 尝试学习理解下Claude Code的实现原理和细节 在Antigravity中对比体验Claude Sonnet 4.5模型 来看下我装备了5060TI显卡的gpt-oss模型表现 来看下google最新力作Antigravity的水平如何
学习下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还是挺好用的
之前还不知道,最近是跟着最新这波龙虾热才知道
想要搞个数字团队
分工各司其职
正好可以用到这个功能