1. 前言:Git 是 AI 编程时代的安全网
以前我对 Git 的理解比较简单,觉得它主要就是用来上传代码、下载代码,或者和 GitHub 配合使用。但在使用 Codex、Claude Code 等 AI 编程工具之后,我逐渐意识到,Git 不只是一个“代码上传工具”,而是 AI 编程时代非常重要的安全网。
Git 本质上是一个版本控制工具。简单来说,它可以帮助我们记录代码在不同时间点的状态。每完成一部分修改,就可以通过 Git 保存一次版本。以后如果代码改坏了,或者想查看之前的实现方式,就可以回到过去的某个版本。
在没有 Git 的时候,很多人可能会用复制文件夹的方式备份代码,比如:
project_v1
project_v2
project_final
project_final_final
project_final_really_final
这种方式虽然直观,但时间久了很容易混乱。我们很难知道每个版本之间具体改了什么,也很难判断哪个版本是稳定的。
对于 AI 编程来说,Git 的作用更加明显。因为 Codex、Claude Code 这类工具改代码的速度很快,一次可能会修改多个文件,甚至会重构原来的逻辑。如果没有 Git,我们就很难判断 AI 到底改了哪些内容,也很难在代码出问题后快速恢复到修改前的状态。
所以,这篇教程不是一篇完整的 Git 官方手册,而是我根据自己使用 AI 编程工具和服务器实验代码的过程整理出来的 Git 学习笔记。
重点不是把 Git 的所有功能都学完,而是先掌握最常用、最保命的操作:
- 如何查看修改
- 如何保存版本
- 如何建立实验分支
- 如何回退错误代码
- 如何把本地代码同步到 GitHub
可以把 Git 理解成代码的“时间机器”:
commit:保存一次代码快照branch:创建一条新的实验路线diff:查看这次到底改了什么restore:撤销错误修改log:查看过去的版本记录
2. 创建版本库:让 Git 开始管理项目
在使用 Git 管理代码之前,需要先理解一个概念:版本库。
版本库,也叫仓库,英文是 Repository。它可以简单理解为一个被 Git 接管的项目文件夹。这个文件夹里的文件新增、修改、删除,Git 都可以追踪和记录。
Git 并不会自动管理电脑里的所有文件。只有当我们在某个项目目录中执行 git init 之后,这个目录才会变成一个 Git 版本库。
例如,我们先创建一个项目目录,然后输入git init指令,git就会在当前目录下生一个隐藏文件.git,它里面记录了提交历史、分支信息、版本变化等内容。一般情况下,我们不需要手动修改 .git 目录里的文件。如果不小心删除了 .git 目录,这个项目就会失去 Git 的版本记录,变回一个普通文件夹。
mkdir my_project
cd my_project
git init
3. Git 的基本流程:工作区、暂存区、本地仓库
在使用 Git 保存代码之前,需要先理解 Git 的三个区域:
- 工作区:正在修改的项目文件夹
- 暂存区:准备提交的修改
- 本地仓库:已经保存下来的版本记录
它们之间的关系可以简单理解为:
工作区 → 暂存区 → 本地仓库
修改文件 git add git commit
也就是说,我们先在工作区修改文件,然后用 git add 把修改加入暂存区,最后用 git commit 把暂存区里的内容提交到本地仓库。
3.1 工作区:正在修改的文件
工作区就是我们正在编辑的项目文件夹。
比如在 VS Code 里修改了 README.md、main.py 或其他代码文件,这些修改最开始都发生在工作区。
可以使用下面的命令查看当前工作区的状态:
git status
这个命令可以告诉我们:
- 哪些文件被修改了
- 哪些文件还没有被 Git 跟踪
- 哪些文件已经加入暂存区
- 当前是否有内容可以提交
3.2 暂存区:准备提交的修改
暂存区可以理解为“准备提交的修改”。
为什么需要暂存区呢?因为我们有时候并不想把所有修改一次性提交。暂存区就像提交前的购物车,你可以先把想提交的内容放进去,确认没问题后再统一提交;不想提交的内容,就先留在工作区。
如果只想暂存某一个文件,可以写文件名:
git add README.md
如果想把当前目录下所有修改都加入暂存区,可以使用:
git add .
这里的 . 表示当前目录,所以 git add . 的意思就是:把当前目录下的所有修改都加入暂存区。
需要注意的是,加入暂存区并不等于已经保存成版本。它只是表示这些修改已经准备提交。
在 AI 编程场景下,建议不要每次都无脑 git add .,最好先用 git status 或 git diff 看清楚 AI 到底改了哪些文件,再决定是否全部加入暂存区。
3.3 本地仓库:真正保存版本的地方
本地仓库是真正保存 Git 版本记录的地方。
把修改加入暂存区后,就可以使用 git commit 保存版本:
git commit -m "更新 README 文档"
其中,-m 后面的内容是本次提交说明,用来描述这次修改做了什么。
例如:
git commit -m "添加 Git 基本流程说明"
提交完成后,这次修改就会被保存到本地仓库,成为 Git 历史记录中的一个版本。
以后如果代码改坏了,就可以根据这些提交记录查看历史、对比差异,甚至回退到之前的版本。
3.4 一个完整示例
假设我们修改了 README.md 文件,可以按照下面的流程提交:
# 1. 查看当前状态
git status
# 2. 把 README.md 加入暂存区
git add README.md
# 3. 提交到本地仓库
git commit -m "更新 README 文档"
如果想提交当前目录下所有修改,也可以这样写:
git status
git add .
git commit -m "保存当前代码版本"
3.5 提交说明怎么写
git commit -m 后面的提交说明不要太随便。
不推荐一直写:
git commit -m "update"
因为时间久了之后,很难看出这次提交到底改了什么。
更推荐写得具体一点,例如:
git commit -m "修复登录接口报错问题"
git commit -m "添加 Git 暂存区说明"
git commit -m "调整实验参数配置"
好的提交说明可以帮助我们以后快速理解每一次代码修改的目的。
3.6 小结
这一章只需要记住下面这条流程:
修改文件 → git add → git commit
对应关系是:
工作区 → 暂存区 → 本地仓库
常用命令是:
git status
git add .
git commit -m "提交说明"
在 AI 编程时,推荐养成下面这个习惯:
git status
git diff
git add .
git commit -m "提交说明"
也就是先看清楚 AI 改了什么,确认没问题后,再保存成一个新的版本。
4. 查看修改:搞清楚 AI 到底改了什么
在 AI 编程场景下,查看修改非常重要。
因为 Codex、Claude Code 这类工具一次可能会修改多个文件,有时候不仅会改我们要求的地方,还可能顺手调整其他代码。如果不先检查修改内容,直接提交或者运行,就很容易把错误代码保存下来。
所以,让 AI 改完代码之后,建议先做三件事:
看状态 → 看具体修改 → 再决定是否提交
4.1 查看当前状态:git status
git status 可以查看当前项目里哪些文件发生了变化。
git status
它可以告诉我们:
- 哪些文件被修改了
- 哪些文件是新创建的
- 哪些文件已经加入暂存区
- 当前有没有内容可以提交
比如,当 AI 修改了一些文件后,我们可以先运行:
git status
这样就能大概知道 AI 动了哪些文件。
4.2 查看具体改了什么:git diff
如果想看文件里面具体改了哪些代码,可以使用:
git diff
git diff 会显示工作区中还没有加入暂存区的修改。
简单来说,它可以帮助我们回答一个问题:
AI 这次到底改了哪些代码?
在 AI 编程时,git diff 非常有用。每次 AI 修改完代码后,都建议先看一眼:
git diff
确认修改内容没有问题之后,再执行 git add 和 git commit。
4.3 查看暂存区里的修改:git diff --staged
如果已经执行过 git add,修改就进入了暂存区。
这时候再执行:
git diff
可能看不到刚才加入暂存区的内容。
如果想查看暂存区里准备提交的修改,需要使用:
git diff --staged
这个命令可以帮助我们确认:
这次即将提交的内容到底是什么?
4.4 一个推荐流程
在让 AI 修改代码后,可以按照下面的流程检查:
# 1. 查看哪些文件被修改了
git status
# 2. 查看具体代码变化
git diff
# 3. 确认没问题后加入暂存区
git add .
# 4. 再检查即将提交的内容
git diff --staged
# 5. 提交到本地仓库
git commit -m "说明本次修改内容"
如果发现 AI 改了不该改的文件,就不要急着提交,可以先检查或者撤销这些修改。
4.5 小结
这一章主要记住三个命令:
git status # 查看哪些文件发生了变化
git diff # 查看工作区具体改了什么
git diff --staged # 查看暂存区准备提交什么
在 AI 编程时,推荐养成一个习惯:
不要让 AI 改完就直接提交,先用 git status 和 git diff 看清楚它到底改了什么。
5. 版本回退与撤销:代码改坏了怎么办
使用 Git 最大的好处之一,就是代码改坏之后可以恢复。
这一章主要介绍几种常见情况:
- 撤销工作区的修改
- 取消已经暂存的文件
- 查看历史提交记录
- 回退到之前的版本
5.1 撤销工作区的修改
如果某个文件被改坏了,而且还没有执行 git add,可以使用 git restore 撤销它。
例如,撤销 README.md 的修改:
git restore README.md
如果想撤销当前目录下所有未暂存的修改,可以使用:
git restore .
需要注意的是,这个操作会直接丢弃工作区里的修改,所以执行前最好先用下面的命令看清楚改了什么:
git status
git diff
5.2 取消暂存区里的文件
如果已经执行了 git add,文件进入了暂存区,但后来发现暂时不想提交它,可以取消暂存:
git restore --staged README.md
如果想取消暂存区里的所有文件,可以使用:
git restore --staged .
这个命令只是把文件从暂存区移回工作区,不会删除你的代码修改。
可以简单理解为:
git restore --staged:取消准备提交
git restore:撤销实际修改
5.3 查看历史提交记录
如果想查看之前保存过哪些版本,可以使用:
git log
它会显示详细的提交记录,包括提交 ID、作者、时间和提交说明。
如果想看更简洁的版本,可以使用:
git log --oneline
输出可能类似这样:
a1b2c3d 添加 Git 基本流程说明
e4f5g6h 更新 README 文档
i7j8k9l 初始化项目
前面的 a1b2c3d 就是提交 ID。后面如果要回退版本,就会用到它。
5.4 回退到之前的版本
如果代码已经提交过,但后来发现当前版本有问题,可以回退到之前的提交。
例如:
git reset --hard a1b2c3d
这条命令的意思是:把当前项目回退到提交 ID 为 a1b2c3d 的那个版本。
需要特别注意:
git reset --hard 会丢弃当前版本之后的修改
所以在使用之前,一定要确认自己真的想回退。建议先执行:
git log --oneline
git status
看清楚当前状态和目标版本之后,再执行回退操作。
5.5 AI 改坏代码时的推荐处理方式
如果 AI 改完代码后发现不对,不要急着继续让 AI 乱改。可以先按照下面的流程处理:
# 1. 查看 AI 修改了哪些文件
git status
# 2. 查看具体改动
git diff
# 3. 如果确认这些修改都不要了,撤销所有未暂存修改
git restore .
如果 AI 的修改已经加入暂存区,可以先取消暂存,再撤销:
git restore --staged .
git restore .
如果已经提交了错误版本,可以查看历史记录,然后回退:
git log --oneline
git reset --hard 提交ID
5.6 小结
这一章主要记住下面几个命令:
git restore 文件名 # 撤销某个文件的工作区修改
git restore . # 撤销所有未暂存修改
git restore --staged 文件名 # 取消某个文件的暂存
git restore --staged . # 取消所有暂存
git log --oneline # 查看简洁提交历史
git reset --hard 提交ID # 回退到指定版本
6. 分支管理:给实验代码开一条新路线
分支是 Git 里非常重要的功能。
可以把分支理解成一条新的代码路线。主分支保存相对稳定的代码,实验分支用来尝试新功能、改参数、跑实验或者让 AI 修改代码。
这样做的好处是:即使实验分支上的代码改坏了,也不会影响主分支上的稳定版本。
6.1 为什么需要分支
在写代码或者做实验时,我们经常会遇到这种情况:
- 想尝试一个新功能
- 想修改一组实验参数
- 想让 AI 重构一部分代码
- 想测试某个不确定的想法
如果直接在主分支上修改,一旦代码改坏了,就会比较麻烦。
更推荐的做法是:先创建一个新的分支,在新分支上随便尝试。确认没问题后,再把这个分支合并回主分支。
可以简单理解为:
main 分支:稳定版本
实验分支:用来尝试新想法
6.2 查看当前分支
可以使用下面的命令查看当前有哪些分支:
git branch
输出可能类似这样:
* main
其中 * 表示当前所在的分支。
6.3 创建并切换到新分支
如果想创建一个实验分支,可以使用:
git switch -c exp1
这条命令的意思是:创建一个名为 exp1 的新分支,并切换到这个分支。
执行后,可以再查看一下当前分支:
git branch
可能会看到:
main
* exp1
这说明当前已经在 exp1 分支上了。
6.4 在实验分支上修改代码
切换到实验分支后,就可以正常修改代码、运行实验、让 AI 改代码。
修改完成后,依然按照之前的流程提交:
git status
git add .
git commit -m "在 exp1 分支上修改实验代码"
这样,这次修改就只保存在 exp1 分支上,不会影响 main 分支。
6.5 切换回主分支
如果想回到主分支,可以使用:
git switch main
切换之后,你会发现代码状态回到了主分支对应的版本。
这也是分支的意义:不同分支可以保存不同的代码状态。
6.6 合并分支
如果实验分支上的修改确认没有问题,就可以把它合并回主分支。
先切换到主分支:
git switch main
然后执行合并:
git merge exp1
这条命令的意思是:把 exp1 分支上的修改合并到当前的 main 分支。
6.7 删除已经不用的分支
如果实验分支已经合并完成,不再需要,可以删除:
git branch -d exp1
如果这个分支还没有合并,Git 可能会阻止删除,避免误删代码。
如果你非常确定这个分支不要了,可以强制删除:
git branch -D exp1
不过新手不建议随便使用 -D,因为它会强制删除未合并的分支。
6.8 AI 编程中的分支使用建议
在 AI 编程场景下,分支非常有用。
推荐每次让 AI 做比较大的修改前,先创建一个新分支:
git switch -c ai-test
然后再让 AI 修改代码。
AI 修改完成后,先检查:
git status
git diff
如果确认没问题,再提交:
git add .
git commit -m "AI 辅助修改某个功能"
如果 AI 改得不好,可以直接切回主分支,或者删除这个实验分支,不影响原来的稳定代码。
6.9 小结
这一章主要记住下面几个命令:
git branch # 查看分支
git switch -c exp1 # 创建并切换到 exp1 分支
git switch main # 切换回 main 分支
git merge exp1 # 把 exp1 合并到当前分支
git branch -d exp1 # 删除已经合并的分支
在 AI 编程和实验代码管理中,可以简单记住一句话:
不确定的修改,先开分支;确认没问题,再合并回主分支。
7. 远程仓库:把代码同步到 GitHub
前面几章讲的内容,主要都是在本地电脑或服务器上使用 Git。
但是在实际开发中,我们通常还会把代码同步到 GitHub。这样做有几个好处:
- 可以把代码备份到云端
- 可以在不同电脑或服务器之间同步代码
- 可以和别人协作开发
- 可以保存实验代码的历史版本
GitHub 上的仓库就叫远程仓库。本地电脑上的仓库叫本地仓库。
可以简单理解为:
本地仓库:保存在自己电脑或服务器上的代码仓库
远程仓库:保存在 GitHub 上的代码仓库
7.1 查看当前远程仓库
如果想查看当前项目有没有关联远程仓库,可以使用:
git remote -v
如果已经关联了 GitHub 仓库,可能会看到类似输出:
origin git@github.com:username/project.git (fetch)
origin git@github.com:username/project.git (push)
其中,origin 是远程仓库的默认名字。
7.2 添加远程仓库
如果本地项目还没有关联 GitHub 仓库,可以先在 GitHub 上新建一个仓库,然后把它添加到本地项目中。
使用命令:
git remote add origin 仓库地址
例如:
git remote add origin git@github.com:username/project.git
或者使用 HTTPS 地址:
git remote add origin https://github.com/username/project.git
添加完成后,可以用下面的命令确认:
git remote -v
7.3 推送代码到 GitHub
本地代码提交之后,并不会自动上传到 GitHub。
git commit 只是把代码保存到本地仓库。如果想同步到 GitHub,还需要执行:
git push
第一次推送时,通常需要指定远程仓库和分支:
git push -u origin main
这条命令的意思是:
把本地 main 分支推送到 origin 远程仓库
其中:
origin:远程仓库的名字main:要推送的分支名-u:建立本地分支和远程分支的关联
以后再次推送时,就可以直接使用:
git push
7.4 从 GitHub 拉取代码
如果 GitHub 上的代码发生了变化,比如你在另一台电脑上提交了新代码,或者别人更新了仓库,就需要把远程代码拉取到本地。
使用命令:
git pull
它的作用是:
把 GitHub 上的最新代码同步到当前本地分支
在服务器和本地电脑之间同步代码时,git pull 很常用。
7.5 克隆已有仓库
如果 GitHub 上已经有一个项目,想把它下载到本地或服务器,可以使用:
git clone 仓库地址
例如:
git clone git@github.com:username/project.git
或者:
git clone https://github.com/username/project.git
执行后,Git 会自动下载整个项目,并创建一个已经关联远程仓库的本地版本库。
7.6 本地仓库和远程仓库的关系
可以简单理解为:
git commit:保存到本地仓库
git push:上传到 GitHub
git pull:从 GitHub 拉取最新代码
git clone:从 GitHub 下载整个项目
也就是说:
本地修改 → git add → git commit → git push → GitHub
需要注意的是,git commit 之后代码只是保存在本地,并没有上传到 GitHub。
如果想让 GitHub 上也有这次修改,还需要执行:
git push
7.7 一个完整示例
假设我们本地已经有一个 Git 项目,并且想把它上传到 GitHub,可以按照下面的流程:
# 1. 查看当前状态
git status
# 2. 把修改加入暂存区
git add .
# 3. 提交到本地仓库
git commit -m "更新项目代码"
# 4. 添加远程仓库
git remote add origin git@github.com:username/project.git
# 5. 推送到 GitHub
git push -u origin main
如果远程仓库已经添加过,那么以后只需要:
git status
git add .
git commit -m "更新项目代码"
git push
7.8 小结
这一章主要记住下面几个命令:
git remote -v # 查看远程仓库
git remote add origin 仓库地址 # 添加远程仓库
git push -u origin main # 第一次推送到 GitHub
git push # 推送本地提交
git pull # 拉取远程更新
git clone 仓库地址 # 克隆远程仓库
在日常使用中,可以简单记住:
commit 是保存到本地,push 才是上传到 GitHub。
8. AI 编程中的推荐 Git 流程
在 AI 编程场景下,推荐不要直接在原项目上乱改,而是先把项目复制到自己的 GitHub 私有仓库中,再基于自己的仓库进行修改、实验和备份。
这一章以一个常见场景为例:
看到一个 GitHub 项目 → 下载到本地/服务器 → 上传到自己的 GitHub 私有仓库 → 开分支让 AI 修改
8.1 场景说明
假设现在 GitHub 上有一个开源项目:
https://github.com/original-author/example-project.git
我们想做的事情是:
- 把这个项目下载到本地或服务器;
- 在自己的 GitHub 上创建一个私有仓库;
- 把代码上传到自己的私有仓库;
- 后续在自己的仓库中开分支,让 AI 工具辅助修改代码。
这样做的好处是:
- 不会影响原作者的项目;
- 自己的修改可以完整保存;
- 代码可以同步到 GitHub;
- AI 改坏代码后也方便回退;
- 可以用分支管理不同实验版本。
8.2 第一步:下载原项目
先进入你想存放代码的目录,例如:
cd ~/projects
然后使用 git clone 下载原项目:
git clone https://github.com/original-author/example-project.git
进入项目目录:
cd example-project
这时候,这个项目已经是一个 Git 仓库了。
可以查看当前远程仓库:
git remote -v
你可能会看到类似输出:
origin https://github.com/original-author/example-project.git (fetch)
origin https://github.com/original-author/example-project.git (push)
这说明当前项目还关联着原作者的 GitHub 仓库。
8.3 第二步:在自己的 GitHub 上创建私有仓库
接下来,登录自己的 GitHub,创建一个新的仓库。
比如仓库名叫:
my-example-project
注意:
- 仓库可以设置为 Private
- 不要勾选初始化 README
- 不要添加
.gitignore - 不要添加 License
因为本地已经有完整项目代码了,远程仓库保持空仓库即可。
创建完成后,GitHub 会给你一个仓库地址,例如:
git@github.com:your-username/my-example-project.git
或者 HTTPS 地址:
https://github.com/your-username/my-example-project.git
8.4 第三步:修改远程仓库地址
因为这个项目是从原作者仓库 clone 下来的,所以默认远程地址还是原作者的仓库。
我们需要把远程地址改成自己的 GitHub 私有仓库。
可以先删除原来的远程地址:
git remote remove origin
然后添加自己的远程仓库地址:
git remote add origin git@github.com:your-username/my-example-project.git
如果你使用 HTTPS 地址,也可以写成:
git remote add origin https://github.com/your-username/my-example-project.git
添加完成后,再查看一次:
git remote -v
如果看到的是自己的仓库地址,就说明远程仓库已经切换成功。
8.5 第四步:推送代码到自己的私有仓库
确认远程仓库地址没有问题后,就可以把代码推送到自己的 GitHub 仓库。
一般主分支叫 main,可以执行:
git push -u origin main
如果项目的主分支叫 master,则执行:
git push -u origin master
如果不确定当前分支叫什么,可以先查看:
git branch
带 * 的就是当前所在分支,例如:
* main
推送完成后,刷新自己的 GitHub 私有仓库页面,就可以看到代码已经上传成功。
8.6 第五步:创建实验分支,让 AI 修改代码
代码上传到自己的私有仓库后,不建议直接在 main 分支上让 AI 大改代码。
更推荐先创建一个实验分支:
git switch -c ai-test
然后再使用 Codex、Claude Code 等 AI 工具修改代码。
AI 修改完成后,先查看改了哪些文件:
git status
再查看具体改了什么:
git diff
确认没有问题后,再提交:
git add .
git commit -m "AI 辅助修改项目代码"
然后推送实验分支到自己的 GitHub:
git push -u origin ai-test
这样,GitHub 上就会出现一个新的 ai-test 分支。
8.7 如果 AI 改坏了怎么办
如果 AI 修改后发现代码有问题,而且还没有提交,可以直接撤销工作区修改:
git restore .
如果已经加入暂存区,可以先取消暂存,再撤销:
git restore --staged .
git restore .
如果已经提交了错误版本,可以先查看历史记录:
git log --oneline
然后回退到之前的版本:
git reset --hard 提交ID
如果只是实验分支彻底不要了,也可以切回主分支后删除实验分支:
git switch main
git branch -D ai-test
8.8 一个完整流程示例
下面是完整命令流程:
# 1. 下载原 GitHub 项目
cd ~/projects
git clone https://github.com/original-author/example-project.git
cd example-project
# 2. 查看当前远程仓库
git remote -v
# 3. 删除原作者仓库地址
git remote remove origin
# 4. 添加自己的 GitHub 私有仓库地址
git remote add origin git@github.com:your-username/my-example-project.git
# 5. 确认远程仓库地址
git remote -v
# 6. 查看当前分支
git branch
# 7. 推送到自己的 GitHub 私有仓库
git push -u origin main
# 8. 创建 AI 实验分支
git switch -c ai-test
# 9. 让 AI 修改代码后,查看修改
git status
git diff
# 10. 确认没问题后提交
git add .
git commit -m "AI 辅助修改项目代码"
# 11. 推送实验分支
git push -u origin ai-test
如果当前项目主分支不是 main,而是 master,需要把上面的:
git push -u origin main
git switch main
改成:
git push -u origin master
git switch master
8.9 小结
这一章可以记住这个流程:
clone 原项目 → 创建自己的私有仓库 → 修改远程地址 → push 到自己的 GitHub → 开实验分支 → 让 AI 修改
核心命令是:
git clone 原项目地址
git remote remove origin
git remote add origin 自己的仓库地址
git push -u origin main
git switch -c ai-test
git status
git diff
git add .
git commit -m "提交说明"
git push -u origin ai-test
在 AI 编程中,推荐始终遵守一个原则:
稳定代码放 main,不确定修改开分支。