要点速览
Git 是记录文件变更历史的版本控制工具,可以把项目存成一个个快照(提交),之后随时比较、还原。对 AI 用户来说,它最重要的用途是:让代理动手前先提交一次,结束后用 git diff 逐行检查它改了什么,不满意就还原。另外,密钥和 .env 这类机密文件要用 .gitignore 排除,不要提交进去。
Git 入门对 AI 用户来说,只需要先抓住一件事:让 AI 代理改你的文件之前,先留一个能回得去的版本。代理一次可能改十几个文件,你很难凭记忆知道它动了哪里;有了 Git,你可以逐行看到它改了什么,不满意就还原。这篇不谈安装步骤,只讲概念、最少要会的指令,以及和 AI 代理一起工作时的使用习惯。
Git 是什么?为什么 AI 用户需要它
版本控制(Version control)是一种记录文件随时间变化的系统,让你之后可以叫出某个特定版本。Pro Git 这本官方在线书指出,它让你可以把个别文件或整个项目还原到先前的状态、比较不同时间的变化,而且搞砸或遗失文件时也比较容易救回来。它不只适用代码,几乎任何文件都能用。
Git 是目前最常见的版本控制工具。GitHub 的官方文档把它归类为分布式版本控制系统:每个人手上都有完整的项目与历史纪录,不需要一直连着中央服务器。所以 Git 大部分的操作只用到你自己电脑上的文件,没有网络也能查历史、比较差异、提交。
很多人用「拷贝一份文件夹、在名称加上日期」来留备份。Pro Git 也提到这种做法很常见,但很容易出错,例如忘了自己在哪个文件夹里、不小心覆盖到错的文件。
和 AI 代理一起工作时,Git 解决的是三个实际问题:
- 看得见:代理改了哪些文件、每个文件改了哪几行,一个指令就能列出来。
- 回得去:改坏了,可以回到代理动手前的版本。
- 分得开:可以让代理在另一条「分支」上实验,不影响你原本能用的版本。
五个核心概念
| 名词 | 一句话 | 和 AI 代理的关系 |
|---|---|---|
| 保存库(Repository) | Git 管理的项目,包含所有文件、文件夹和每个文件的修改历史 | 代理工作的范围,最好就是这一个文件夹 |
| 提交(Commit) | 项目在某个时间点的快照,附上说明消息 | 代理动手前、确认结果后各提交一次 |
| 分支(Branch) | 指向某个提交、会随新提交往前移动的指针,用来分出不同的开发路线 | 让代理在分支上实验,主线保持干净 |
| 差异(Diff) | 两个版本之间添加与删除的每一行 | 检查代理成果最直接的方式 |
| .gitignore | 列出「不要让 Git 追踪」的文件规则 | 把密钥、.env 这类机密排除在外 |
保存库:Git 管理的项目文件夹
保存库(Repository)是 Git 管理的项目,包含项目里所有的文件、文件夹,以及每个文件的修改历史。GitHub 的文档说明,因为 Git 是分布式的,每个保存库都是独立完整的单位,有一份副本的人就能看到全部的代码和历史。
在一般文件夹里运行 git init,Git 会在里面创建一个隐藏的子文件夹来存放版本数据;用 git clone 则是把别处已有的项目,连同完整历史拷贝一份到你的电脑。
提交:项目在某一刻的快照
提交(Commit)是把项目目前的状态存成一个快照,并写下一句说明。Pro Git 的说法是:每次提交,Git 基本上就是替你所有的文件在那一刻拍一张照片。
Git 里的文件有三种状态,弄懂它们,git status 的输出就看得懂了:
- 已修改(Modified):文件改过了,但还没存进版本纪录。
- 已暂存(Staged):用
git add标记,表示「这个版本要放进下一次提交」。 - 已提交(Committed):已经安全地存进你电脑上的版本数据库。
另外,Git 还没开始管理的新文件叫未追踪(Untracked)。新文件要先 git add 一次,Git 才会把它纳入之后的快照。
Pro Git 特别提醒一点:提交过的内容几乎都能找回来,但从未提交过的内容,弄丢了很可能就找不回来。这也是「先提交、再让代理动手」的根据。
分支:不影响主线的实验路线
分支(Branch)是指向某个提交、会随着新的提交自动往前移动的指针。Pro Git 说明,Git 的分支非常轻量,创建一个分支只是多创建一个指针;你常看到的 main 或 master 也只是分支名称,本身并不特别。
对 AI 用户来说,分支的用途很单纯:想让代理试一个不确定的做法,就先开一个新分支。结果好就合并回来,不好就切回原本的分支,主线完全不受影响。
差异:逐行检查代理改了什么
差异(Diff)是两个版本之间的逐行比较:哪些行被添加、哪些行被删除。Pro Git 的说明是,git status 只告诉你哪些文件改了,git diff 则会列出确切添加和删除的每一行。
代理说「我已经完成了」的时候,不要只看它的总结,请自己看一次差异。这和 AI 代理任务说明怎么写 里「要求代理附上证据」是同一个道理。
.gitignore:哪些文件不该被提交
.gitignore 是一个文字档,每一行是一条规则,列出 Git 应该忽略、不要追踪的文件。Pro Git 建议在新的保存库一开始就把它设好,以免不小心提交了根本不想放进去的文件,例如记录档或自动产生的文件。
对 AI 用户来说,最重要的一条是排除放密钥的文件。很多任务具会把 API 密钥放在 .env 档(一个用来存放环境变量设置的文字档)里,它就应该写进 .gitignore:
.env
但要注意一个常见误会:Git 的官方文档说明,.gitignore 只对还没被追踪的文件有效,已经被追踪的文件不受影响。如果某个文件早就被提交过,要先用 git rm --cached 文件名 让 Git 停止追踪它,再把它加进 .gitignore。而它在旧提交里的内容仍然存在,这就是下一节要讲的状况。
最少要会的指令
下面这组指令,足以应付「让代理工作、检查、存盘或还原」的日常流程。指令要在终端机里、项目文件夹内运行;终端机还不熟,请先看 终端机基础。
| 指令 | 用途 |
|---|---|
git init | 把目前的文件夹变成 Git 保存库 |
git clone 网址 | 把现有的项目连同完整历史拷贝到你的电脑 |
git status | 列出哪些文件已修改、已暂存或未追踪 |
git diff | 逐行列出还没暂存的修改 |
git diff --staged | 逐行列出已暂存、准备提交的修改 |
git add 文件名 | 把文件目前的版本放进下一次提交(git add . 是整个文件夹) |
git commit -m "说明" | 把已暂存的内容存成一个快照 |
git log --oneline | 一行一个,列出提交历史 |
git switch -c 分支名称 | 创建新分支并切换过去 |
git switch 分支名称 | 切换到已有的分支 |
git restore 文件名 | 把文件还原成上次暂存或提交的版本(会丢掉本机修改) |
关于最后一个指令,Pro Git 的警告值得照抄下来:git restore 文件名 是危险的指令,你在那个文件上所有没提交的修改都会消失,Git 只是直接用上次的版本把它盖过去。除非你非常确定不要那些修改,否则不要用。
和 AI 代理一起工作的五个习惯
以下是本站整理的工作习惯,不是官方标准;每一项背后的依据都写在说明里。
- 动手前先确认状态干净:运行
git status,有没提交的修改就先提交。这样代理做的每一处变更,都和你自己的修改分得开,要还原时也只会还原代理的部分。 - 不确定的任务开分支:用
git switch -c 分支名称开一条新路线再让代理工作,主线维持在能用的状态。 - 结束后自己看差异:先
git status看动到哪些文件,再用git diff逐行检查。特别留意你没要求它改的文件。 - 满意才提交:检查过才
git add、git commit,提交消息写清楚这次改了什么,之后才找得到。 - 不要的部分再还原:已追踪的文件可以用
git restore 文件名还原;代理新创建的文件属于未追踪,git status会列出来,确认后自行删除。
代理工具的「复原」不能取代 Git
很多 AI 代理工具有自己的复原功能,但涵盖范围有限。以 Claude Code 为例,官方文档说明它的检查点(Checkpoint,代理在修改文件前自动保存的快照)只追踪它自己文件编辑工具所做的修改:
- 只被终端机指令改动过的文件,不在追踪范围内,官方建议用 Git 这类版本控制来还原。
- 你自己在工具外手动改的文件,通常也不会被记录。
- 数据库、API、部署这类影响远程系统的动作,无法用检查点还原。
文档也明确表示,检查点是给单一工作阶段快速复原用的,长期的版本历史和协作,仍要靠 Git。远程动作的风险,要靠权限设置和人工确认来控制,详见 让 AI 代理安全操作电脑。
不小心把密钥提交了怎么办?
先讲结论:第一步是让密钥失效,不是去改历史纪录。
GitHub 的官方文档说明,如果你要移除的机密数据是密码、Token 或凭证,第一步就是撤销或轮替它;一旦失效,别人拿到也不能用,这样可能就已经足够。真的要从历史纪录中删除,需要改写历史,会让提交的识别码全部改变、需要所有协作者配合清理,而且已经被别人拷贝或分叉的副本,你无法替他们清除。
所以实务上的顺序是:
- 到服务商的后台撤销那把密钥,创建新的。
- 检查有没有异常用量。
- 把新密钥改放在 .env 这类不会提交的地方,并确认 .gitignore 已经排除它。
- 是否还要改写历史,再依项目是否公开、有多少人拷贝过来判断。
密钥的保管原则,请看 API Key 是什么,以及怎么安全保管。
Git 和 GitHub 的差别
| Git | GitHub | |
|---|---|---|
| 是什么 | 记录版本的工具 | 存放 Git 保存库的在线服务 |
| 在哪里运作 | 你的电脑,不需要网络 | 网络上的服务器 |
| 主要功能 | 提交、分支、比较差异、还原 | 存放保存库、议题讨论、合并请求、代码审查等协作功能 |
| 一定要用吗 | 想留版本就需要 | 只替自己的项目留版本时,不一定需要 |
GitHub 的官方文档说明,GitHub 是用来存放 Git 保存库、并在上面提供协作工具的平台。换句话说,Git 是底层的工具,GitHub 是创建在它之上的服务;你可以只用 Git,不用 GitHub。
接着看什么
- 还不熟悉终端机:终端机基础
- 让代理工作前,先把范围与权限设好:让 AI 代理安全操作电脑
- 把任务交代清楚,并要求代理附上证据:AI 代理任务说明怎么写
- 密钥保管:API Key 是什么,以及怎么安全保管
- 名词不熟:到 名词小辞典 查,例如 Git、保存库、提交、分支、.gitignore。
常见问题
Git 和 GitHub 是同一个东西吗?
不是。Git 是在你电脑上记录版本的工具,不需要网络也能用;GitHub 是存放 Git 保存库的在线服务,另外提供议题讨论、合并请求、代码审查等协作功能。只想替自己的项目留版本,用 Git 就够了。
我不写程序,也需要学 Git 吗?
如果你会让 AI 代理修改你电脑上的文件,就很值得学最基本的几个指令。Git 不只能管理代码,几乎任何文件都可以用它留版本;它让你看得到代理改了什么,也能在改坏时还原。
AI 代理工具已经有「复原」功能,还需要 Git 吗?
需要。以 Claude Code 为例,官方文档说明它的检查点只追踪自己文件编辑工具做的修改,单纯由终端机指令改动的文件不在其中,并明确表示检查点不能取代 Git 这类版本控制。数据库、部署这类远程动作则两者都无法还原。
不小心把 API 密钥提交进 Git 了怎么办?
第一步是到服务商的后台撤销或轮替那把密钥,让它失效。GitHub 的官方文档指出,从历史纪录中删除机密数据是很麻烦的过程,而且已经被别人拷贝的副本无法由你清除,所以让密钥失效才是最重要的一步。
把 .env 加进 .gitignore,就一定不会被提交吗?
只对还没被 Git 追踪的文件有效。Git 官方文档说明,.gitignore 不影响已经被追踪的文件;如果它早就被提交过,要先用 git rm --cached 让 Git 停止追踪,再加进 .gitignore,而且旧的提交里仍然留着它。
还原变更会不会反而把我的东西弄丢?
会,如果你还原的是没有提交过的内容。Pro Git 提醒,git restore 这类指令会用上次的版本直接覆盖文件,本机尚未提交的修改会消失;反过来说,已经提交过的内容几乎都能找回来。所以先提交、再实验,是最保险的习惯。
留言
用 GitHub 账号登录就能留言,留言会公开显示在 GitHub Discussions。留言前请先看社区规则。