AI 时代的 Git 进阶术:如何优雅地让多个 Agent 并行开发

前情提要

缘起:AI 并发能力与传统 Git 工作流的碰撞

接触到 git worktree 的直接原因,是在使用 Claude Code 辅助编程时遇到的文件系统层面的物理瓶颈。当试图让 AI Agent 在同一个代码项目中并行开发两个不同的需求 时,由于传统的 Git 仓库在同一时刻只能检出一个工作分支,导致多个 AI 任务无法在同一个工作目录下同时运行。为了给不同的 Agent 提供独立的物理执行环境,我找到了 git worktree 。


什么是 Git Worktree?

平时我们用 git checkout 切换分支时,文件会在同一个文件夹里变来变去。如果你正在写一个大功能,写到一半突然需要去修复一个紧急 Bug,通常只能用 git stash 把代码藏起来,或者先提交一个乱糟糟的 commit。

git worktree 是 Git 提供的一个强大的高级功能,它允许你在同一个本地 Git 仓库中,同时检出(checkout)多个不同的分支到不同的物理文件目录中。

常用命令速查

1. 添加新的工作区 语法:git worktree add <路径> <分支名>

示例 :假设你当前在 my-project 目录下,想在同级目录创建一个名为 my-project-hotfix 的文件夹,并检出 master 分支:

plain 复制代码
git worktree add ../my-project-hotfix master

如果你想基于当前分支创建一个新分支并检出到新工作区,可以加上 _-b_ 参数:

plain 复制代码
git worktree add -b hotfix/bug-123 ../my-project-hotfix master

2. 查看当前所有的工作区 可以列出当前仓库关联的所有物理路径及其对应的分支:

plain 复制代码
git worktree list

3. 移除工作区 当你完成了紧急修复,不再需要那个目录时,可以使用命令安全移除:

plain 复制代码
git worktree remove ../my-project-hotfix

(注意:移除前请确保该工作区没有未提交的更改,否则 Git 会阻止你删除。可以加 _-f_ 强制移除。)

4. 清理失效的工作区 如果你习惯直接在文件系统中"暴力"删除了工作区文件夹(右键 -> 删除),Git 的内部记录里可能还会保留它的追踪信息。运行以下命令可以清理掉这些失效的记录:

plain 复制代码
git worktree prune

怎么玩(How)

首先,创建一个 Git 仓库

bash 复制代码
mkdir ml-pipeline
cd ml-pipeline
git init

在这个仓库里添加 README.md 和一个 Python 文件

bash 复制代码
echo "# ML Pipeline" > README.md
echo "def load_data():" > train.py
echo " print('Loading training data...')" >> train.py

commit 并且创建一个分支

bash 复制代码
git add .
git commit -m "Initial commit"
git branch feature-preprocessing

现在你得到了一个有 2 个分支的 Git 仓库: main 和 feature-preprocessing 。

为现有分支创建工作树,只需一个命令:

bash 复制代码
git worktree add ../ml-pipeline-preprocessing feature-preprocessing

这一步在当前位置的上一层级创建了一个名为: ml-pipeline-preprocessing 的文件夹

接下来为另一个全新的工作,同时创建一个分支和一个工作树:

bash 复制代码
git worktree add -b feature-visualization ../ml-pipeline-viz

-b 的意思是创建 feature-visualization 分支并在新的工作树中检出该分支

worktree的结构:

bash 复制代码
git worktree list

第一行显示你的主工作树 ------ 包含.git文件夹的原始目录。第二行显示你的链接工作树。两行都显示当前的提交哈希和已检出的分支。

每个worktree目录都有完整的Git仓库功能。你可以进入目录,编辑文件,执行 git status ,并且 commit 。但是链接的worktrees没有完整的 .git 文件夹,而是使用一个 .git 文件用来指向主仓库。在主.git目录内部,有一个worktrees文件夹,用于存储每个链接工作树的元数据。


在 worktree 中工作

接下来,可以进入 feature-preprocessing 并完成提交:

bash 复制代码
cd ../ml-pipeline-preprocessing
cat >> train.py << 'EOF'
def preprocess_features(df):
"""Normalize numeric features."""
return (df - df.mean()) / df.std()
EOF
git add train.py
git commit -m "Add feature preprocessing function"

回到 main worktree 并且查看提交历史:

bash 复制代码
cd ../ml-pipeline
git log --oneline --all


在 Worktree 目录中提交所有修改

bash 复制代码
# 进入你的 worktree 物理目录
cd ../feature-worktree

# 确认你在 feature-A 分支上
git branch

# 暂存并提交你的所有修改
git add .
git commit -m "feat: 完成在 worktree 中的开发"

过河拆桥(清理 Worktree)

代码合并完并推送到远端后,那个额外的物理文件夹和分支就没有利用价值了。为了保持环境整洁,建议安全地删掉它们:

bash 复制代码
# 1. 安全移除物理工作区(注意路径要写对)
git worktree remove ../feature-worktree

# 2. 删除已经合并完毕的本地分支
git branch -d feature-A

Git Worktree 使用案例

并行开发(Parallel feature development)

你正在实现自定义指标和一个新的数据加载器 ------ 这是两个独立的功能。为每个功能设置一个工作树:

bash 复制代码
git worktree add -b feature-custom-metrics ../ml-pipeline-metrics
git worktree add -b feature-streaming-loader ../ml-pipeline-loader

现在的文件夹目录结构如下:

bash 复制代码
~/projects/
ml-pipeline/ [main] - your usual work
ml-pipeline-metrics/ [feature-custom-metrics]
ml-pipeline-loader/ [feature-streaming-loader]

现在可以分别在各自的终端运行(并行)这两个功能:

bash 复制代码
# Terminal 1
cd ~/projects/ml-pipeline-metrics
python experiments/evaluate_custom_metrics.py
# Terminal 2
cd ~/projects/ml-pipeline-loader
pytest tests/test_data_loader.py -v

两个进程会同时运行且不会产生冲突。当一个功能完成后,将其合并并移除工作树:

bash 复制代码
cd ~/projects/ml-pipeline
git merge feature-custom-metrics
git worktree remove ../ml-pipeline-metrics

Reference

  1. https://git-scm.com/docs/git-worktree
  2. Git Worktree Tutorial: Work on Multiple Branches Without Switching
相关推荐
前端双越老师9 小时前
程序员 1v1 访谈系列第二期:很焦虑但又不知道干啥
前端·ai编程·全栈
GeWeAPI技术支持9 小时前
个人微信API二次开发:如何给消息回调增加异常日志和排查线索
人工智能·微信
武子康9 小时前
ESP32 唤醒词标称 98%,为什么还要自己做验收?
人工智能·后端·agent
JAVA老架构AI智能化9 小时前
PPT Master Lite — 浏览器端 AI 驱动的 PPT 生成器
人工智能·powerpoint
碧海银沙音频科技研究院9 小时前
炬芯ATS3089智能手表烧录方法
人工智能·驱动开发·嵌入式硬件·算法
维克兜率天9 小时前
【维克】统计套利:寻找市场的“定价误差“
人工智能·python·算法
论文复现现场9 小时前
自动驾驶 BEV 模型训练,2 张 A100 80GB 够不够?显存、双卡训练与租赁成本
人工智能·深度学习·机器学习·自动驾驶·分布式训练·a100·bevformer
陈嘿萌9 小时前
TPAMI 2026|红外、SAR、深度与地图能否用一套特征匹配?北理工HIMO给出无需预训练的通用路线
图像处理·人工智能·深度学习·计算机视觉·图像匹配·学术研究与理论基础
天云数据9 小时前
帮手如何用一句话配置消防任务
人工智能
const_qiu9 小时前
第一章 1.3:System Prompt 定义模型角色 —— 告诉 AI“你是谁“
人工智能·ubuntu·prompt