Git & GitHub for Vibe Coders:AI 编程时代的版本控制白话指南

本文面向使用 Claude Code、Cursor 等 AI 编程工具,但没有传统开发背景的朋友。
你不需要一开始就背熟所有 Git 命令,但必须理解 Git 的核心机制:
如何存档、如何回退、如何隔离风险、如何与 AI / 团队协作。

如果你经常看到 AI 弹出这些词:

commit
branch
push
pull
PR
merge
conflict
restore
revert
worktree

不要被吓到。本文会用最白话的方式,把 Git 和 GitHub 讲清楚,并教你如何用自然语言指挥 AI 正确操作版本控制。


一、先建立心智模型:Git 不是网盘,GitHub 也不是普通云盘

很多初学者会误以为:

Git = 上传代码的工具
GitHub = 存放代码的网盘

这个理解不够准确。

更准确的说法是:

Git 是本地的版本控制系统。
GitHub 是基于 Git 的代码托管与协作平台。

你可以这样理解:

概念 白话比喻 真实作用
Git 本机版本追踪器 / 游戏存档系统 记录代码每次变化,让你可以回退、比较、恢复
GitHub 代码专用的云端仓库 / 团队协作平台 存放 Git 提交历史,方便备份、协作、审查代码
commit 手动游戏存档 在本地记录一个安全版本
push 把存档同步到云端 将本地提交上传到 GitHub
pull 从云端拉取最新进度 把远程最新代码同步到本地
branch 平行时空实验沙盒 在不影响主线的情况下开发新功能
PR 修改提案 请别人审查你的代码,再决定是否合并
merge 合并分支 把实验分支的成果并入正式主线

重点一句话:

GitHub 不是简单接收文件夹,它接收的是 Git 管理好的提交历史。

GitHub 网页确实可以手动上传少量文件,但真正的版本管理、协作、回退、审查,都依赖 Git 的提交记录。


二、Git 与 GitHub 的关系

1. GitHub:代码托管平台

GitHub 是一个网站,用来:

  • 存放代码仓库。
  • 备份代码。
  • 多人协作。
  • 提交 PR。
  • 审查代码。
  • 管理 Issue。
  • 发布 Release。
  • 配置 CI/CD 自动化流程。

你可以把它理解成:

代码的云端仓库 + 团队协作平台

但它不是普通网盘。

普通网盘同步的是文件。

GitHub 同步的是:

谁在什么时间
基于哪个版本
改了哪些文件
为什么改
是否经过审查

2. Git:本地版本管理工具

Git 安装在你自己的电脑上。

它负责:

  • 追踪文件变化。
  • 记录每次提交。
  • 创建分支。
  • 合并代码。
  • 解决冲突。
  • 回退版本。
  • 与 GitHub 同步。

你可以把 Git 理解成:

代码世界的时光机

每次 commit,都是给当前项目拍一张快照。

以后如果代码被 AI 改坏了,你可以回到之前某个正常的快照。


3. git init:开始追踪这个项目

如果你有一个本地项目文件夹,想让 Git 开始管理它,可以执行:

git init

它的作用是:

在当前文件夹里初始化一个 Git 仓库。

执行之后,当前文件夹就会变成一个 Git 可管理的项目。

你可以理解为:

告诉 Git:从现在开始,帮我记录这个文件夹里的变化。

三、Git 的四个关键区域

要真正理解 Git,建议先记住四个区域。

工作区
↓ git add
暂存区
↓ git commit
本地仓库
↓ git push
远程仓库

1. 工作区 Working Directory

就是你电脑上能看到的文件。

比如:

index.html
app.js
package.json
.env

你正在编辑的这些文件,就属于工作区。

白话理解:

你的办公桌。

2. 暂存区 Staging Area

暂存区是你准备提交的一组改动。

比如你改了 10 个文件,但这次只想提交其中 3 个文件。

你可以先把这 3 个文件放进暂存区:

git add file1.js file2.js file3.js

或者把当前所有改动都加入暂存区:

git add .

白话理解:

打包前的纸箱。
你先把要存档的东西放进纸箱,但还没封箱。

3. 本地仓库 Local Repository

执行 commit 后,暂存区的内容会被保存到本地 Git 仓库。

git commit -m "feat: add login page"

白话理解:

本机游戏存档。

注意:

commit 只保存在你自己电脑上,不会自动上传到 GitHub。


4. 远程仓库 Remote Repository

远程仓库通常在 GitHub 上。

执行 push 后,本地提交才会上传到 GitHub。

git push

白话理解:

把本机存档同步到云端备份。

四、单人开发最重要的两个动作:Commit 与 Push


1. Commit:本机存档

Commit 是什么?

Commit 是给当前代码状态建立一个版本记录。

你可以把它理解成:

打 Boss 前的手动存档。

如果后面 AI 把代码改坏了,你可以回到这个存档。


Commit 的正确时机

建议在以下情况提交:

  1. 一个功能完成了一小步。
  2. 测试通过。
  3. 代码可以正常运行。
  4. 一个 bug 修复完成。
  5. AI 准备进行大范围修改前。
  6. 你想保存当前可工作的版本。

不要等到一天结束才提交一次。

更好的方式是:

小步提交,频繁存档。

Commit 命令示例

查看当前状态:

git status

查看具体改动:

git diff

把改动加入暂存区:

git add .

提交:

git commit -m "feat: add coupon claim button"

Commit Message 建议

不要写:

update
fix
修改
改了一点东西
AI 帮我改的

建议写清楚:

feat: add coupon claim button
fix: prevent expired coupon from being claimed
docs: update installation guide
refactor: extract coupon validation logic
test: add tests for coupon expiry
chore: update dependencies

常见类型:

类型 含义
feat 新功能
fix 修复 bug
docs 文档修改
style 格式调整,不影响逻辑
refactor 重构,不新增功能也不修复 bug
test 增加测试
chore 杂项,例如依赖、配置

对 AI 说的自然语言指令

你可以这样指挥 AI:

现在这版功能已经测试通过。
请先运行 git status 和 git diff,确认改动范围。
如果改动符合预期,请帮我 git add 并 commit。
commit message 要写清楚这次修改了什么。
不要 push。

更严格一点:

请只提交本次登录功能相关的文件。
不要提交 .env、node_modules、dist、build 等无关文件。
提交前先列出将要提交的文件清单,等我确认后再执行。

2. Push:上传到 GitHub

Push 是什么?

Push 是把本地 commit 上传到远程仓库。

白话理解:

把本机存档同步到云端。

Commit 和 Push 的区别

这是新手最容易混淆的地方。

commit = 本地存档
push = 上传存档到 GitHub

也就是说:

你 commit 了 10 次,如果没有 push,GitHub 上什么都看不到。

第一次推送本地项目到 GitHub

通常流程是:

git init
git add .
git commit -m "init: project setup"
git branch -M main
git remote add origin https://github.com/你的用户名/你的仓库.git
git push -u origin main

解释:

git init

初始化本地 Git 仓库。

git add .

把当前文件加入暂存区。

git commit -m "init: project setup"

创建第一次提交。

git branch -M main

把当前分支命名为 main

git remote add origin https://github.com/你的用户名/你的仓库.git

把本地仓库和 GitHub 仓库关联起来。

git push -u origin main

第一次推送,并记住默认推送目标。


对 AI 说的自然语言指令

帮我把当前本地仓库关联到 GitHub 远程仓库。
远程地址是:https://github.com/你的用户名/你的仓库.git
请先检查 git remote -v。
如果还没有 origin,请添加 origin。
然后推送到 main 分支。

五、Vibe Coder 必须优先学会的安全规则:.gitignore


1. 为什么 .gitignore 极其重要?

如果你的项目里有:

OpenAI API Key
Stripe Secret Key
数据库密码
云服务 Access Key
JWT Secret
第三方服务 Token

一旦不小心 push 到 GitHub 公开仓库,可能会造成严重后果:

  • API Key 被扫描器自动抓走。
  • 被盗刷。
  • 数据库被连接。
  • 云服务资源被滥用。
  • 产生真实金钱损失。

所以版本控制第一课不是 commit,而是:

不要把密钥提交到 Git 仓库。


2. .gitignore 是什么?

.gitignore 是一个配置文件。

它告诉 Git:

哪些文件不要追踪。
哪些文件不要提交。

例如:

.env
.env.local
node_modules/
dist/
build/
.DS_Store
*.log

3. 常见 .gitignore 示例

Node.js / 前端项目

node_modules/
dist/
build/
.env
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.DS_Store

Python 项目

__pycache__/
*.py[cod]
.env
.venv/
venv/
env/
dist/
build/
*.log
.DS_Store

通用敏感文件

.env
*.pem
*.key
secrets.json
credentials.json

4. 重要提醒:.gitignore 不能忽略已经提交过的文件

如果 .env 已经被 commit 过了,后面再写进 .gitignore 是不够的。

因为 Git 已经开始追踪它了。

这时需要:

  1. 立刻更换泄露的密钥。
  2. 从 Git 历史中清理该文件。
  3. 通知协作者。
  4. 必要时重新创建仓库。

只删除最新一次提交里的文件,不等于从历史中删除。


5. 如果密钥已经提交到 GitHub,怎么办?

正确顺序:

第一步:立即作废并重新生成密钥。
第二步:从代码和历史中清理密钥文件。
第三步:检查是否还有别的地方泄露。
第四步:通知协作者。

不要只是:

删除文件,再 commit 一次。

因为历史里仍然有。


6. 对 AI 说的安全指令

请检查当前项目是否存在敏感文件。
重点检查 .env、API Key、Token、密码、私钥、credentials、secrets。
确保这些文件已经加入 .gitignore。
如果它们已经被 Git 追踪,请告诉我,不要直接提交。
不要把这些文件 commit 或 push 到远程仓库。

六、几个常见术语:local、remote、origin、main


1. local:本地

指你自己电脑上的代码和 Git 仓库。

local = 你的电脑

2. remote:远程

指远程服务器上的仓库,通常在 GitHub。

remote = 云端仓库

3. origin:远程仓库的默认别名

当你 clone 一个 GitHub 仓库时,Git 通常会把远程仓库命名为:

origin

你可以理解为:

origin 就是“默认的那个 GitHub 地址”

查看远程仓库:

git remote -v

可能看到:

origin  https://github.com/yourname/project.git (fetch)
origin  https://github.com/yourname/project.git (push)

4. main:主分支

main 通常是项目的正式稳定分支。

以前很多项目默认分支叫:

master

现在更常见的是:

main

你可以理解为:

main = 正式版代码

5. “push 到 origin main”是什么意思?

这句话的意思是:

把本地 main 分支的提交,推送到名为 origin 的远程仓库里的 main 分支。

命令:

git push origin main

如果是第一次推送:

git push -u origin main

七、团队协作基础:Clone 与 Pull


1. Clone:完整复制一个项目

如果你想参与一个已有项目,不要只是 Download ZIP。

Download ZIP 的问题是:

只有文件,没有 Git 历史。

你拿不到:

  • 提交记录。
  • 分支信息。
  • 远程仓库关联。
  • 版本历史。
  • 合并记录。

正确方式是 clone:

git clone https://github.com/用户名/仓库名.git

白话理解:

把整盒带历史记录的棋盘完整复制到你电脑上。

Clone 之后你会得到什么?

你会得到:

完整代码
完整提交历史
远程仓库关联
默认分支

你可以查看历史:

git log

查看远程仓库:

git remote -v

注意:Clone 不等于拥有写权限

Clone 只是把仓库复制到本地。

你能不能 push,取决于:

你是否被仓库管理员授予写权限。

如果没有权限,你可以:

  1. Fork 项目。
  2. Clone 自己的 Fork。
  3. 修改后提交 PR。

2. Pull:拉取最新进度

当队友把代码 push 到 GitHub 后,你本地不会自动同步。

你需要执行:

git pull

白话理解:

从云端下载最新进度。

Pull 的本质

默认情况下:

git pull = git fetch + git merge

也就是:

  1. 先从远程下载最新提交。
  2. 再合并到你当前分支。

对 AI 说的自然语言指令

开始开发前,请先帮我检查当前分支。
如果我在 main 分支,请先 git pull,确保本地是最新进度。
然后再从最新 main 创建新的功能分支。

八、团队协作四步循环

对于新手,记住这个循环就够了:

1. clone:第一次加入项目。
2. pull:开始工作前,先拉取最新代码。
3. commit:自己改好后,本地存档。
4. push:把本地存档推送到远程。

更完整的工程流程是:

pull main
↓
create branch
↓
modify code
↓
test
↓
commit
↓
push branch
↓
open PR
↓
code review
↓
merge
↓
pull main again

九、Branch:AI 编程时代最重要的防爆机制


1. 为什么需要 Branch?

假设你正在开发一个新功能。

AI 可能需要:

  • 反复修改。
  • 尝试方案。
  • 重构代码。
  • 删除文件。
  • 替换依赖。
  • 修改多个模块。

如果直接在 main 上改,会出现一个问题:

在功能完成之前,main 可能一直是半坏状态。

这非常危险。


2. Branch 是什么?

Branch 是分支。

你可以理解为:

平行时空实验沙盒。

在分支上,AI 可以随便试错。

只要不合并,主线就不会受影响。

main:正式稳定版
feature/login:登录功能实验分支
fix/payment:支付 bug 修复分支

3. 分支的核心价值

隔离风险。

具体好处:

  1. 不污染 main。
  2. 可以同时开发多个功能。
  3. 方便代码审查。
  4. 方便回滚。
  5. 方便多人或多 AI 并行工作。
  6. 实验失败可以直接删除分支。

4. 创建并切换分支

推荐使用较新的 Git 命令:

git switch -c feat/coupon-claim

它表示:

创建并切换到 feat/coupon-claim 分支。

旧命令也可以:

git checkout -b feat/coupon-claim

查看当前分支:

git branch

当前分支前面会有 *


5. 切换回 main

git switch main

或者旧命令:

git checkout main

6. 推送新分支到 GitHub

第一次推送新分支:

git push -u origin feat/coupon-claim

之后再推送:

git push

7. 分支命名建议

推荐格式:

feat/功能名
fix/问题名
refactor/模块名
docs/文档名
chore/杂项名

示例:

feat/user-login
feat/coupon-claim
fix/payment-timeout
refactor/coupon-service
docs/update-readme

8. 对 AI 说的分支指令

现在准备开发优惠券领取功能。
请先确认当前是否在 main 分支。
如果是,请先 git pull。
然后从最新 main 创建并切换到 feat/coupon-claim 分支。
之后所有改动都只提交到这条分支。
不要修改 main。
不要直接合并到 main。

十、PR 与 Merge:把分支成果合并回主线


1. PR 是什么?

PR 全称:

Pull Request

在 GitLab 里通常叫:

Merge Request

PR 不是 Git 本身的命令,而是 GitHub 等平台提供的协作机制。

它的作用是:

告诉团队:我这个分支改好了,请审查,看看能不能合并。

2. PR 的标准流程

1. 从 main 创建分支。
2. 在分支上开发。
3. 提交 commit。
4. push 分支到 GitHub。
5. 在 GitHub 上创建 PR。
6. 邀请别人 review。
7. 根据反馈修改。
8. 审查通过后 merge。

3. PR 描述应该写什么?

一个好的 PR 应该包含:

1. 这次做了什么。
2. 为什么这么做。
3. 改了哪些文件。
4. 如何测试。
5. 是否有风险。
6. 是否涉及数据库、环境变量、依赖变化。

模板:

## 功能说明

实现用户领取优惠券功能。

## 修改内容

- 新增优惠券领取接口。
- 增加用户限领校验。
- 增加优惠券过期校验。
- 增加相关单元测试。

## 测试方式

1. 使用未领取过的用户调用领取接口。
2. 验证返回成功。
3. 验证数据库生成用户优惠券记录。
4. 验证重复领取返回错误。
5. 验证过期优惠券无法领取。

## 风险

- 涉及数据库写入。
- 需要注意并发领取时的库存问题。

## 截图 / 日志

如有必要,附上测试截图或日志。

4. 对 AI 说的 PR 指令

帮我把当前分支推送到 GitHub。
然后准备一个 PR 描述。
PR 标题要简洁说明本次功能。
PR 内容需要包括:
1. 本次做了什么。
2. 修改了哪些文件。
3. 如何测试。
4. 是否有风险。
不要直接 merge。

5. Merge 是什么?

Merge 是把分支代码合并回主线。

例如:

feat/coupon-claim → main

合并之后,新功能才正式进入主线。


6. 常见 Merge 方式

GitHub 上常见有三种合并方式。

Merge commit

保留完整分支历史,并生成一个合并提交。

适合:

想保留完整开发过程。

Squash and merge

把分支上的多个 commit 压缩成一个 commit。

适合:

分支里有很多零碎提交,希望主线历史更干净。

例如:

fix
fix again
update
wip
test

最终压缩成:

feat: add coupon claim

Rebase and merge

让提交历史变成一条直线。

适合:

希望历史线性、清晰。

但新手使用时要谨慎,尤其是公共分支。


7. 新手最容易踩的坑:网页 Merge 后本地没同步

在 GitHub 网页上点击 Merge 后,发生的是:

远程 main 更新了。

但是你电脑上的 main 不会自动同步。

你必须手动拉取:

git switch main
git pull

否则下次你从本地 main 开新分支时,可能基于旧代码开发。


8. Merge 后的标准动作

git switch main
git pull

然后再开新分支:

git switch -c feat/next-feature

9. 对 AI 说的自然语言指令

这个 PR 已经在 GitHub 上合并了。
请帮我切回本地 main 分支。
然后执行 git pull,确保本地 main 是最新版本。
之后再从最新 main 创建新的功能分支。

十一、Worktree:多 AI 并行开发的黑科技


1. Branch 的局限

Branch 虽然能隔离风险,但有一个现实问题:

同一个项目文件夹,同一时间通常只能显示一个分支。

如果你有两个 AI Agent:

Agent A 开发数据库功能。
Agent B 开发 UI 功能。

它们如果在同一个文件夹里工作,就可能互相干扰。

比如:

  • A 刚切到数据库分支。
  • B 又切到 UI 分支。
  • 文件状态混乱。
  • AI 看到的内容不一致。
  • 提交范围出错。

2. Worktree 是什么?

Worktree 可以让一个 Git 仓库同时拥有多个工作目录。

白话理解:

同一个 Git 记忆库,
额外长出第二张、第三张实体办公桌。

每张桌子可以打开不同分支。

但它们共享同一个 Git 历史。


3. Worktree 的典型场景

假设你有两个任务:

任务 A:数据库功能
任务 B:UI 功能

你可以创建两个独立目录:

project/
project-db/
project-ui/

其中:

project/       主工作目录
project-db/    数据库分支工作目录
project-ui/    UI 分支工作目录

然后:

Agent A 在 project-db/ 里开发 feat/db
Agent B 在 project-ui/ 里开发 feat/ui

两者互不干扰。


4. 创建 Worktree

假设当前主项目在:

project/

你想新增一个数据库工作目录:

git worktree add ../project-db -b feat/db

意思是:

在上级目录创建 project-db 文件夹。
同时创建并切换到 feat/db 分支。

再创建一个 UI 工作目录:

git worktree add ../project-ui -b feat/ui

5. 查看 Worktree

git worktree list

可能看到:

/project          abc1234 [main]
/project-db       def5678 [feat/db]
/project-ui       ghi9012 [feat/ui]

6. 删除 Worktree

如果某个 worktree 不用了:

git worktree remove ../project-db

如果还有未提交修改,Git 会阻止删除。

确认不需要后可以强制删除,但要谨慎:

git worktree remove --force ../project-db

7. Worktree 注意事项

同一个分支通常不能同时被多个 worktree 检出

例如:

worktree A 已经 checkout main
worktree B 通常不能再 checkout main

这是为了避免两个目录同时修改同一个分支状态。


Worktree 不是复制仓库

Worktree 不是 git clone

它共享同一个 .git 数据。

优点:

省空间。
历史一致。
分支一致。
提交互通。

多 AI 并行时,任务边界要清楚

建议:

一个 Agent 一个 worktree。
一个 worktree 一个功能分支。
一个功能分支对应一个明确任务。

不要让多个 Agent 同时改同一个 worktree。


8. 对 AI 说的 Worktree 指令

我需要并行开发两个功能。
请基于当前 main 创建两个 worktree:
1. ../project-db,分支 feat/db,用于数据库功能。
2. ../project-ui,分支 feat/ui,用于 UI 功能。
创建前先确认当前 main 是最新状态。
不要修改 main。
每个 worktree 的改动只提交到对应分支。

十二、Conflict:冲突是什么,怎么处理?


1. 为什么会发生 Conflict?

当两个分支修改了同一处代码,Git 不知道该保留哪个版本,就会产生冲突。

例如:

A 把标题改成:

const title = "记账工具";

B 把同一行改成:

const title = "个人财务助手";

合并时 Git 会懵:

这一行到底听谁的?

2. 冲突长什么样?

冲突文件里可能出现:

<<<<<<< HEAD
const title = "记账工具";
=======
const title = "个人财务助手";
>>>>>>> feat/ui

含义:

<<<<<<< HEAD
当前分支的内容。
=======
分隔线。
>>>>>>> feat/ui
要合并进来的另一个分支的内容。

3. 解决冲突的本质

解决冲突不是单纯选 A 或选 B。

而是根据产品需求决定:

最终代码应该是什么。

可能有三种结果:

方案一:保留一边

例如以 A 为准:

const title = "记账工具";

方案二:两边都保留

例如两边只是新增不同内容:

const categories = ["餐饮", "交通", "理财"];

方案三:重新整合

例如两边逻辑都有价值,但需要重新设计:

const basicCategories = ["餐饮", "交通"];
const advancedCategories = ["理财"];

4. 解决冲突的标准流程

git status

查看哪些文件冲突。

然后打开冲突文件,手动或让 AI 修改成最终正确版本。

解决后:

git add 冲突文件
git commit

如果是在 rebase 过程中:

git add 冲突文件
git rebase --continue

5. Vibe Coder 在冲突中的职责

你不需要亲自逐行改代码。

但你必须给 AI 明确的产品决策。

错误说法:

你帮我解决冲突。

这样 AI 可能乱猜。

正确说法:

帮我解决这个 conflict。
分类列表逻辑以 main 为主。
但是我新增的“理财”分类要保留,并移动到进阶选单里。
解决后运行测试。
不要删除已有功能。

6. 对 AI 说的冲突处理指令

当前 merge 出现 conflict。
请先运行 git status,列出冲突文件。
然后逐个解释冲突原因。
不要直接删除任何一边的逻辑。
产品决策如下:
1. 用户列表逻辑以 main 为准。
2. 我新增的理财分类要保留。
3. 理财分类移动到进阶选单。
4. 保持原有 UI 样式不变。
解决后请运行测试。
如果没有测试,请告诉我需要手动验证哪些页面。

十三、AI 把代码改坏了,怎么救?

这是 AI 编程时代最常见的问题。

别慌,先判断当前处于哪种状态。


情况一:AI 改了文件,但还没有 commit

这是最幸运的情况。

你可以恢复到上一次提交的状态。


1. 查看改动

git status
git diff

2. 恢复单个文件

git restore 文件名

例如:

git restore src/app.js

这会把 src/app.js 恢复到最近一次提交的状态。


3. 恢复所有文件

谨慎使用:

git restore .

这会把当前目录下的改动都恢复掉。

注意:

未提交的修改可能会永久丢失。


4. 如果文件已经 add 到暂存区

先取消暂存:

git restore --staged 文件名

再恢复文件:

git restore 文件名

5. 对 AI 说的指令

刚刚这次修改我不要了。
请先运行 git status 和 git diff。
如果这些改动还没有 commit,请帮我把它们恢复到上一次正常版本。
恢复前请先列出将被丢弃的文件。
不要删除未追踪的新文件,除非我明确确认。

情况二:已经 commit,但还没有 push

这时可以用 revert 安全撤销。


1. 查看提交历史

git log --oneline

你会看到类似:

a1b2c3d feat: add coupon claim
e4f5g6h fix: login redirect

2. 使用 revert 撤销某个 commit

git revert a1b2c3d

它不会删除历史,而是新增一个反向提交。

白话理解:

做一次相反操作,把之前的改动抵消掉。

3. 为什么推荐 revert?

因为 revert 保留历史记录。

它对协作更安全。


4. 对 AI 说的指令

我刚刚提交了一个错误 commit。
请先运行 git log --oneline,帮我找到最近一次错误提交。
然后用 git revert 撤销它。
不要使用 git reset --hard。
不要改写已经推送到远程的历史。

情况三:已经 push 到 GitHub

这时更推荐使用:

git revert

不推荐新手使用:

git reset --hard
git push --force

因为强制推送会改写远程历史,可能影响队友。


对 AI 说的安全指令

这个错误 commit 已经 push 到远程了。
请使用 git revert 生成一个反向提交来修复。
不要使用 force push。
不要改写远程历史。
完成后告诉我需要 push 哪些 commit。

情况四:需要彻底重置本地分支

如果你非常确定只想本地回退,可以使用:

git reset --hard 提交号

例如:

git reset --hard a1b2c3d

但这很危险。

它会移动分支指针,并可能丢弃改动。

新手谨慎使用。

尤其不要随便:

git reset --hard HEAD
git push --force

救急决策表

情况 推荐方式 风险
改了文件,还没 add / commit git restore 会丢弃未保存修改
已 add,还没 commit git restore --staged + git restore 会丢弃未保存修改
已 commit,没 push git revert 或谨慎 reset revert 更安全
已 push 到远程 git revert 安全,保留历史
公共分支强制回退 不推荐 会影响协作者
密钥泄露 立即轮换密钥 + 清理历史 只删最新提交不够

十四、AI 编程时代的 Git 纪律

使用 AI 写代码时,版本控制不只是工具,更是安全边界。

建议建立以下纪律。


1. 不要让 AI 随意改 main

错误做法:

直接在 main 上让 AI 大改。

正确做法:

先从 main 创建功能分支。
所有实验都在分支里进行。

2. 每个小阶段都 commit

AI 可能一次改很多文件。

如果中间没有存档,一旦改坏,很难回退。

建议:

每完成一个可验证的小目标,就 commit 一次。

3. 提交前让 AI 检查改动

提交前先 git status 和 git diff。

避免把无关文件、临时文件、密钥文件提交进去。


4. 不要让 AI 自动 push 到 main

建议:

push 到功能分支可以。
merge 到 main 必须人工确认。

5. 禁止 AI 随便执行危险命令

以下命令需要特别谨慎:

git reset --hard
git clean -fd
git push --force
git checkout .
git restore .
git rebase
git filter-repo

可以给 AI 设置规则:

未经我明确确认,禁止执行:
git reset --hard
git clean -fd
git push --force
git rebase
git filter-repo

6. 多 Agent 并行必须隔离

推荐:

一个 Agent
一个 worktree
一个 branch
一个任务

不要让多个 Agent 同时操作同一个目录。


十五、给 Cursor / Claude Code 的项目规则模板

你可以在项目规则或系统提示中加入类似内容:

你是一名工程助手,必须遵守以下 Git 安全规则:

1. 修改代码前,先运行 git status,确认当前分支和工作区状态。
2. 未经确认,不要切换分支。
3. 未经确认,不要执行 git push。
4. 绝对禁止执行 git push --force。
5. 绝对禁止执行 git reset --hard,除非我明确要求。
6. 绝对禁止执行 git clean -fd,除非我明确要求。
7. 提交前必须运行 git diff,并列出改动文件。
8. 不要提交 .env、密钥、Token、密码、node_modules、dist、build 等文件。
9. 每个任务只提交与任务相关的改动。
10. commit message 使用 Conventional Commits 格式。
11. 开发新功能前,先从最新 main 创建功能分支。
12. 不要直接修改 main。
13. 不要自动合并 PR。
14. 如果出现 conflict,先列出冲突文件和冲突原因,等待我的产品决策。

十六、完整实战流程:从 0 到 PR

下面演示一个完整流程。

假设你要开发:

用户优惠券领取功能

第一步:确认当前状态

git status

对 AI 说:

请先运行 git status。
告诉我当前在哪个分支。
是否有未提交修改。
是否干净。

第二步:同步最新 main

git switch main
git pull

对 AI 说:

请切回 main 分支。
然后执行 git pull。
确保本地 main 是最新状态。

第三步:创建功能分支

git switch -c feat/coupon-claim

对 AI 说:

请从最新 main 创建并切换到 feat/coupon-claim 分支。
之后所有修改都只提交到这条分支。

第四步:让 AI 开发功能

请实现用户领取未过期优惠券功能。
要求:
1. 先写失败测试。
2. 再写最小实现。
3. 不要实现优惠券核销。
4. 不要修改无关文件。
5. 每完成一个小步骤就停下来汇报。

第五步:检查改动

git status
git diff

对 AI 说:

提交前请先运行 git status 和 git diff。
列出所有改动文件。
确认没有 .env、密钥、node_modules、dist、build 等文件。

第六步:提交

git add .
git commit -m "feat: add coupon claim endpoint"

对 AI 说:

如果改动符合预期,请帮我提交。
commit message 使用 feat: add coupon claim endpoint。
不要 push。

第七步:推送分支

git push -u origin feat/coupon-claim

对 AI 说:

请把 feat/coupon-claim 分支推送到 GitHub。
不要合并到 main。

第八步:创建 PR

对 AI 说:

帮我准备一个 PR 描述。
标题:feat: add coupon claim endpoint
内容包含:
1. 功能说明。
2. 修改文件。
3. 测试方式。
4. 风险点。
不要直接 merge。

第九步:审查通过后合并

在 GitHub 上选择合适的合并方式:

Merge commit
Squash and merge
Rebase and merge

新手推荐:

Squash and merge

主线历史会更干净。


第十步:合并后同步本地 main

git switch main
git pull

对 AI 说:

PR 已经合并。
请切回 main。
执行 git pull。
确认本地 main 已经同步远程最新版本。

十七、常见问题 FAQ


Q1:我 commit 了,GitHub 上为什么看不到?

因为 commit 只是本地存档。

你需要:

git push

Q2:Download ZIP 和 Clone 有什么区别?

Download ZIP:

只有文件,没有 Git 历史。

Clone:

有文件,也有完整 Git 历史和远程关联。

Q3:Pull 和 Clone 有什么区别?

Clone 是第一次完整复制项目。

Pull 是后续同步远程最新改动。

第一次用 clone。
之后用 pull。

Q4:Branch 和 Worktree 有什么区别?

Branch 是版本线。

Worktree 是工作目录。

Branch:平行时空。
Worktree:实体办公桌。

一个 branch 可以在一个 worktree 中被打开。

多个 worktree 可以同时服务不同 branch。


Q5:PR 和 Merge 有什么区别?

PR 是提案。

Merge 是合并动作。

PR:请大家审查我的改动。
Merge:审查通过,正式合并。

Q6:Conflict 一定会发生吗?

不一定。

只有当不同分支修改了同一处代码,并且 Git 无法自动判断时,才会冲突。


Q7:AI 能帮我解决冲突吗?

可以辅助。

但你必须给 AI 明确决策。

例如:

以 main 的逻辑为主。
保留我新增的理财分类。
把理财分类移动到进阶选单。

不要只说:

你帮我解决。

Q8:API Key 不小心提交了怎么办?

第一优先级:

立即作废并重新生成密钥。

然后清理历史。

不要只删除最新文件。


Q9:可以一直不学命令,只让 AI 操作吗?

可以开始这样用。

但你至少要理解:

commit
push
pull
branch
merge
conflict
restore
revert
.gitignore

否则 AI 问你:

是否要 reset?
是否要 force push?
是否要丢弃未提交修改?

你可能做出错误决策。


Q10:Vibe Coder 最应该记住哪几句话?

记住这几句就够了:

开发前先 pull。
新功能先开 branch。
改好先 commit。
上传用 push。
合并走 PR。
合并后再 pull。
密钥永远不进仓库。
危险命令必须人工确认。

十八、核心总结表

概念 / 指令 白话比喻 解决的问题
Git 本机版本追踪器 记录每次改动,防止代码改坏后无法回退
GitHub 云端代码仓库 备份代码、团队协作、代码审查
git init 开始追踪项目 把普通文件夹变成 Git 仓库
Working Directory 办公桌 你正在编辑的文件
Staging Area 打包纸箱 准备提交的改动集合
git add 把文件放进纸箱 将改动加入暂存区
git commit 手动游戏存档 在本地建立安全检查点
git push 上传存档到云端 把本地提交同步到 GitHub
git pull 下载最新存档 获取远程最新代码
git clone 复制整盒带历史的棋盘 第一次完整加入项目
local 你的电脑 本地仓库和工作区
remote 云端地址 远程仓库
origin 默认远程仓库别名 通常指向 GitHub 仓库
main 正式稳定版 项目主线分支
.gitignore 禁止进入的密室门牌 防止密钥、密码、构建产物被提交
branch 平行时空沙盒 隔离新功能开发风险
worktree 多一张实体办公桌 多 AI / 多任务并行开发
PR 修改提案 代码审查与合并流程
Merge 合并分支 将功能并入主线
Conflict 两个版本打架 需要人工或 AI 根据产品决策解决
restore 一键读档 恢复未提交的修改
revert 倒带撤销 安全撤销已经提交的改动
reset 强制回退 本地回退历史,风险较高

十九、最终建议:Vibe Coder 不需要背命令,但必须会做决策

你不需要一开始就记住所有 Git 命令。

但你必须知道:

现在该不该存档?
现在该不该上传?
现在该不该开分支?
现在该不该合并?
这个改动能不能回退?
这个密钥能不能提交?
这个冲突应该保留哪边逻辑?
这个危险命令该不该执行?

AI 可以帮你执行命令。

但产品决策和安全边界必须由你掌握。

真正成熟的 AI 编程流程是:

先理解概念。
再指挥 AI。
用小步提交保护代码。
用分支隔离风险。
用 PR 保证审查。
用 .gitignore 保护密钥。
用 restore / revert 处理事故。

当你能理解 AI 弹出的每一个 Git 术语时,你就不再是被 AI 拖着走的 Vibe Coder,而是能真正掌控项目的工程指挥者。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐