Git 管理项目记忆:让多个 Agent 共享项目上下文
你有没有这种感觉:一个新项目接手的时候,光是搞清楚"这个项目做了什么"就要花很久。看代码、看文档、问同事,折腾一两天才能进入状态。
如果你用过 AI Agent 做开发,还有一个更具体的问题:每个 Agent 都是"失忆"的。你跟 Agent A 讨论了一个方案,Agent B 根本不知道。你跟 Agent A 说"记住我们用了方案 X",下次开新会话它又忘了。
这篇文章想探讨一个思路:用 Git 本身作为项目的"记忆系统",让多个 Agent 通过 Git 共享上下文。
Git 天然就是一个记忆系统
仔细想想,Git 的 commit 历史本身就是一个项目记忆。每一条 commit 记录了三件事:谁、什么时候、做了什么。
你打开一个陌生项目,第一件事是什么?大多数人会先看 git log。为什么?因为 commit 历史就是项目的"日记"。
但现在的用法太粗糙了。我们只用它来看"最近发生了什么",没有用它来回答更深层的问题:这个项目正在做什么?哪些功能完成了?哪些还在进行中?有什么已知的问题?
用分支标记项目状态
一个常见的问题是:我怎么知道项目现在处于什么阶段?
可以用分支来标记状态。main 分支是稳定版本,develop 分支是开发中版本。这个很多团队已经在做了。
更进一步,可以用分支命名来传递信息。feat/user-login 不只是"正在开发登录功能",它在告诉所有人(包括 Agent):当前的工作重心是登录功能。fix/payment-timeout 在告诉所有人:支付超时问题正在修。
如果 Agent 接到了一个任务,它第一步应该做什么?git branch --list。这一条命令就能让它知道团队正在做什么、哪些功能在进行中。
用 commit message 传递上下文
很多团队的 commit message 写得很随意:update、fix bug、改了点东西。这些信息对 Agent 来说几乎没用。
好的 commit message 应该回答两个问题:为什么做这个改动、这个改动影响什么。
对比这两个:
差的写法:fix bug
好的写法:修复用户登录时因 JWT 过期导致的无限循环重定向问题
第二个写法不仅人看得懂,Agent 也能从中提取关键信息:项目用 JWT 做认证,登录模块有重定向逻辑。
如果你希望 Agent 能从 commit 历史中学习项目上下文,就要养成写详细 commit message 的习惯。这不只是为了别人,也是为了未来的自己。
用 tag 标记里程碑
git tag 用来给特定的 commit 打上标记。大多数人用它来标记版本号:v1.0.0、v2.1.0。
但 tag 还可以用来标记其他有意义的节点。比如:
git tag milestone/phase1-complete
git tag experiment/new-auth-flow
git tag review/2026-06-sprint-review
这些 tag 给项目增加了"语义节点"。Agent 看到 milestone/phase1-complete 就知道第一阶段完成了,接下来应该看后续计划。
多 Agent 协作的上下文共享
这是最关键的部分。假设你有三个 Agent 同时在一个项目上工作:Agent A 负责前端,Agent B 负责后端,Agent C 负责测试。
问题是:Agent A 不知道 Agent B 改了 API 接口,Agent C 不知道 Agent A 改了页面布局。
传统的做法是开一个会议,或者建一个文档,但这些都需要人工维护。如果用 Git,上下文自动就共享了。
Agent A 提交了一个 commit:feat: 新增用户头像上传功能,API 接口 POST /api/avatar
Agent B 拉取最新代码时,git log 里就能看到这条记录
Agent C 跑测试时,能对照 commit 了解改动了什么,针对性测试
更进一步的方案:每个 Agent 在开始工作前,先执行 git pull --rebase 拉取最新代码,然后用 git log --since="2 hours ago" 查看最近两小时的改动。这一条命令就让 Agent 知道了"别人最近做了什么"。
一个实际的场景
想象你在做一个个人博客系统。你同时启用了三个 Agent:
Agent A 在开发文章编辑功能。它提交了 commit:feat: 支持 Markdown 实时预览
Agent B 在优化搜索功能。它提交了 commit:perf: 搜索响应时间从 800ms 降到 120ms
Agent C 在修移动端适配的 bug。它提交了 commit:fix: 修复 iOS Safari 下侧边栏显示异常
现在轮到 Agent D 来写部署脚本。它不需要问任何人项目做了什么,只需要:
git log --since="today"
git branch --list
git tag
就知道了:今天有三项改动需要部署,涉及编辑功能、搜索功能和移动端。部署脚本自然要覆盖这三个方面。
实现方案
如果你想在项目中实践这个思路,可以从三个层面入手。
第一层,规范 commit message。用 Conventional Commits 格式:feat:、fix:、perf:、docs: 开头,后面跟一句描述。
第二层,规范分支命名。feat/、fix/、perf/ 开头,后面跟简短描述。
第三层,给 Agent 一个"项目上下文"入口。可以在项目根目录维护一个 PROJECT.md 文件,记录项目概述、当前进度、下一步计划。Agent 每次开始工作前读这个文件就行。
Git 的 commit 历史提供了自动维护的变更记录,PROJECT.md 提供了高层级的上下文。两者结合,Agent 就能快速理解项目状态。
和记忆系统的关系
如果你读过我们之前写的 AI 记忆系统系列文章,可能会觉得这个思路似曾相识。没错,Claude Code 的记忆系统本质上也是在做同样的事:让 AI 记住项目的上下文。
区别在于:Claude Code 的记忆系统是 AI 自己维护的,而 Git 的记忆系统是团队共同维护的。前者可能更智能但不够透明,后者更粗糙但所有人都能看到。
最好的方案可能是两者结合:用 Git 作为"共享记忆",用 AI 记忆系统作为"个人记忆"。Git 记录发生了什么,AI 记忆系统理解为什么发生。
最后
Git 不只是"代码的存档",它还是"团队的记忆"。每次 commit 都是在给未来的自己写信,每次分支都是在给团队指路。
如果你正在用 AI Agent 做开发,试试让 Agent 通过 Git 来理解项目上下文。不需要复杂的工具,一条 git log 就能解决很多问题。