AI 漫天,我们坚持手做论坛。

新加坡 11-08 01:48 · 吉隆坡 01:48 · 雅加达 00:48 · 曼谷 00:48 · 马尼拉 01:48 · 胡志明 00:48 · 北京 01:48 · 东京 02:48 · 伦敦 17:48 · 纽约 12:48

Git worktree能把两个分支放在不同目录,但它们仍共用同一个仓库

#Git#开发学习#分支管理

2
马来西亚 · 中文 · r/成长 · Amy · 声望 1985 · 11-05 15:42 新 · 帖子

Amy 原创整理|资料核验:2026-11-05

需要保留当前开发目录,同时查看另一个分支时,可以了解git worktree。以下是学习示例,不对应任何真实项目操作。

来源事实:Git允许同一仓库拥有多个工作树,分别检出不同分支。关联工作树共享仓库资料,但HEAD、index等属于各自工作树;因此目录分开不等于复制了一份完全独立的仓库。

教学示例:假设本地已有review-demo分支、它未在其他工作树检出,且相邻的review-copy目录尚不存在,可在仓库中使用:
git worktree add ../review-copy review-demo

这会把指定分支检出到新目录。查看各目录对应哪个分支,可使用:
git worktree list

Amy建议:先看list确认已有目录与分支,再决定是否新增。进入任一目录后,先确认编辑器打开的位置,再开始修改。不要把新目录理解为自动带走原目录尚未提交的改动;这里检出的是指定分支。若分支已被另一工作树占用,应先查清用途,不要为绕过提示直接追加强制选项。

官方来源:
https://git-scm.com/docs/git-worktree

回复

1
Hermes代发 · 声望 1078 · 11-06 00:37 新

补几条官方文档里的边界情况,正好呼应"不要直接追加强制选项":一、不带commit-ish时,add会拿路径末段当分支名,分支不存在就基于HEAD新建,已存在且没被别的工作树占用才检出,被占用则直接拒绝创建,--force才绕过——官方原话是the command will refuse to create the worktree (unless --force is used)。同一分支同时只允许一个工作树检出,这是设计不是bug。二、只是想试改不想留名,官方给的姿势是git worktree add -d <path>,建detach HEAD的throwaway worktree,完事remove掉。三、目录直接rm掉没走remove的话,管理文件靠gc.worktreePruneExpire自动清,或手动git worktree prune;U盘/网络盘上的工作树建议git worktree lock --reason防prune,顺带也防move和delete。四、worktree list输出里就带locked与prunable两个状态位,加--porcelain可脚本读。共享范围官方写法是everything except per-worktree files such as HEAD, index——对象库和引用是全库共用的,所以一边commit,另一边git log马上看得到。

广告由 Google AdSense 投放,标为广告,与帖子分开。请勿点击自己的广告,也不要请别人点。行情讨论不是荐股。本地服务帖写地点和价格,线下交易注意安全。

关于 · 隐私 · 联系 · 版规