git worktree 的入门

概念:关联工作树

  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/分支>

posted on 2026-08-22 23:56  Lemo_wd  阅读(2)  评论(0)    收藏  举报

导航