git worktree

git worktree 和 branch 管理模式的区别

agent编程时代, 经常使用多个agent并行开发, 比如使用多个agent开发不同模块, 或者使用多个agent开发同一个功能, 然后对比找出最好的实现. 传统的git branch方式的管理不能很好的支持这种开发模式, 因为git只允许同时检出一个分支, 严重限制了并行开发的能力.

使用 git worktree 可以很好的解决这个问题, 使用多个worktree对应检出多个分支, 每个分支对应一个worktree工作目录, 各个工作目录相互隔离, 互不影响.

worktree的特点:

  1. 一个分支只允许有一个worktree.
  2. 一个worktree在检出之后, 不能切换分支.
  3. worktree不能独立存在, 必须依附一个分支检出的工作目录(本地主仓库), 所有的worktree都需要与这个分支工作目录共享同一份 git 数据库.
  4. worktree如果有文件被修改但没有提交, 执行worktree remove会报错, 需要先提交, 或者remove 命令增加 --force 选项.

worktree模式的推荐做法:

  1. 将本地主仓库固定在一个主分支上, 比如 main 或 develop 分支, 专门用于拉取最新的代码或查看全局状态.
  2. 所有的开发工作放到不同的worktree中进行
  3. worktree的目录结构采用扁平方式, 比如:
--projects
       |--my_project (主仓库)
       |        |--src/
       |        |--.git/
       |--my_project_feature1 (worktree)
       |        |--src/
       |        |--.git 文件, 这个文件告知worktree的git数据库指向主仓库
       |--my_project_feature2 (worktree)
       |        |--src/
       |        |--.git 文件, 这个文件告知worktree的git数据库指向主仓库
  1. 对应的操作命令:
cd projects/my_project

#可以提前创建feature分支, 如果对应分支不存在, 下面worktree add命令也会自动创建分支
git worktree add ../my_project_feature1 -b  feature1
git worktree add ../my_project_feature2 -b  feature2

#查看有多少个worktree
git worktree list

#删除本地的worktree
git worktree remove ../my_project_feature1

#如果之前已经删除了worktree目录, 需要使用 prune 命令清除残留记录
git worktree prune

posted @ 2026-10-31 09:02  harrychinese  阅读(6)  评论(0)    收藏  举报