乐于分享
好东西不私藏

AI 独立开发软件前,先把 Git 学到够用

AI 独立开发软件前,先把 Git 学到够用

我之前学 Git 的时候,总觉得它是程序员才需要背的一堆命令。

后来开始用 AI 写代码,态度变了。

AI 改代码太快了。你让它修一个按钮,它可能顺手改了样式、状态、接口调用,甚至把一个你没提到的文件也动了。页面能跑,不代表这次改动就是干净的。等你发现哪里不对,脑子里只剩一个问题:刚才到底改了什么?

这就是 Git 对 AI 独立开发者的意义。

它不是为了显得专业,而是给自己留一条退路。尤其是一个人做小软件、小工具、小 MVP 时,Git 可以帮你做到三件事:

  • 知道 AI 动了哪些文件;
  • 把每个阶段保存下来;
  • 改坏以后能退回去。

我现在更愿意把 Git 理解成一套开发安全习惯,而不是一门复杂技术。

先记住这一条主线

如果你暂时不想理解太多概念,先记住这套流程就够了:

改之前先看状态
改之后先看差异
确认没问题后提交
重要功能先开分支
提交后推送到 GitHub
出问题用 restore 或 revert 处理

这几句话听起来普通,但放到 AI 开发里很有用。

以前自己写代码,改动速度慢,脑子里大概还记得改过哪里。现在让 AI 连续跑几轮任务,几分钟内可能就是几十处变化。没有 Git,你只能靠记忆和感觉判断。这个风险有点大。

Git 到底是什么

Git 是一个版本管理工具。

更白话一点,它像项目文件的版本记录仪。每次你把一个阶段保存下来,Git 就会记录那一刻的文件状态。以后你可以查看这次改了什么,也可以回到之前的版本。

对写文章的人来说,它可以保存不同版本的文稿。

对开发者来说,它几乎是基础工具。

对用 AI 写代码的人来说,它更像保险绳。因为 AI 一次可能改很多地方,你需要一个工具帮你确认:这些改动是不是你要的。

为什么 AI 开发更需要 Git

我自己觉得,初学者学 Git 不需要一开始就追求完整。先掌握几个能救命的动作。

保存版本

每完成一个阶段,就保存一次。

比如:

初始化项目
完成登录功能
完成订单列表
修复上传问题
调整页面样式

以后如果某次修改出问题,你能知道问题大概从哪一次开始。

看 AI 到底改了什么

AI 改完以后,不要只看页面能不能跑。

要看它具体改了哪些文件、哪些行。

git diff

这个命令会把本次未提交的变化列出来。你可以检查有没有无关文件、有没有删掉重要内容、有没有把密钥写进代码。

撤销错误修改

文件还没提交,可以恢复到上一次提交状态。

已经提交,也可以用更安全的方式撤销某一次提交。

这里先不用急着学 reset。对初学者来说,restore 和 revert 更容易掌握,也更不容易把历史弄乱。

用分支做实验

分支可以理解成一条单独的实验线。

main 保持稳定,新功能放到分支里让 AI 做。确认没问题,再合并回 main

如果 AI 在分支上改坏了,你可以丢掉这条分支,主线不受影响。

推送到 GitHub

本地 Git 只保存在当前电脑上。

推送到 GitHub 后,代码和文档就有了云端备份。换电脑、重装系统,或者以后想找回某个版本,都更方便。

先理解 Git 的四个位置

很多人第一次卡在 Git,是因为不知道文件到底在什么位置。

先别背定义,记这个图:

工作区

工作区就是你当前正在编辑的项目文件夹。

例如:

C:\ZiYun-DDliu\开发教程

你平时看到的 .md 文件、代码文件、图片文件,都在工作区里。

暂存区

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

文件改完后,不会自动进入正式版本。你需要先执行:

git add 文件名

或者把当前目录下所有改动加入暂存区:

git add .

提交

提交就是正式保存一个版本。

git commit -m"提交说明"

每一次提交都会生成一个版本编号。

例如:

0204a37 初始化开发学习文档

0204a37 是这次提交的短编号。以后查看历史、撤销提交时都会用到它。

仓库

仓库是 Git 保存历史记录的地方。

当你运行:

git init

当前目录会出现一个隐藏的 .git 文件夹。这个文件夹就是本地 Git 仓库的核心数据。

远程仓库

远程仓库就是 GitHub、Gitee 这类平台上的云端仓库。

本地仓库和远程仓库的关系大概是:

本地 Git 仓库 <-> GitHub 远程仓库

推送到远程:

git push

从远程拉取:

git pull

第一次使用 Git 前的配置

安装 Git 后,先配置用户名和邮箱。

git config --global user.name "你的名字"
git config --global user.email "你的邮箱"

查看配置:

git config --global--get user.name
git config --global--get user.email

如果能输出你刚才设置的名字和邮箱,就说明配置成功。

这里提醒一句:如果你要把代码推到公开 GitHub 仓库,提交记录里可能会显示邮箱。介意隐私的话,可以去 GitHub 设置里找到 no-reply 邮箱,再把 Git 邮箱改成那个地址。

创建一个本地 Git 仓库

先进入项目目录:

cd C:\ZiYun-DDliu\开发教程

初始化 Git 仓库:

git init

把默认分支改成 main

git branch -M main

查看状态:

git status

如果看到类似内容:

On branch main
No commits yet
Untracked files

说明当前目录已经变成 Git 仓库,但文件还没有被 Git 跟踪。

如果 git status 里的中文文件名显示成下面这样:

"\345\274\200\345\217\221..."

可以运行:

git config --global core.quotepath false

再重新执行:

git status

中文文件名通常就能正常显示了。

第一次提交

把当前目录下的文件加入暂存区:

git add .

再查看状态:

git status

如果看到:

Changes to be committed:
  new file: 开发学习规划.md

说明文件已经准备好提交。

正式提交:

git commit -m"初始化开发学习文档"

查看提交历史:

git log --oneline

你会看到类似:

0204a37 初始化开发学习文档

到这里,第一次版本保存完成。

修改后,先看差异

假设你改了一个文件,先看状态:

git status

如果看到:

modified: 开发学习规划.md

说明这个文件被修改了,但还没有提交。

查看具体改动:

git diff

也可以只看某个文件:

git diff-- 开发学习规划.md

例如你追加了一行:

Add-Content-LiteralPath".\开发学习规划.md"-Encoding UTF8 -Value"`n这是一次 Git 修改练习。"

git diff 里会看到类似:

+
+这是一次 Git 修改练习。

这说明 Git 能精确识别新增内容。

在 AI 开发里,这一步很关键。每次让 AI 改完代码,都应该先看 git diff,再决定要不要提交。

Windows 换行符提示不用慌

在 Windows 上执行 git diff 或 git add 时,可能看到:

warning: in the working copy of '开发学习规划.md', LF will be replaced by CRLF the next time Git touches it

这通常不是严重错误。

它的意思是:文件里的换行符可能会被 Git 按 Windows 风格处理。初学阶段可以先忽略,不影响正常提交。

提交一次修改

确认 git diff 只包含你想要的改动后,加入暂存区:

git add 开发学习规划.md

查看状态:

git status

如果看到:

Changes to be committed:
  modified: 开发学习规划.md

说明修改已经进入暂存区。

提交:

git commit -m"练习修改开发学习规划"

查看历史:

git log --oneline

可能会看到:

2cf5460 练习修改开发学习规划
0204a37 初始化开发学习文档

这表示第二次提交成功。

查看某次提交改了什么

查看某次提交的摘要:

git show --stat2cf5460

可能输出:

开发学习规划.md | 2 ++
1 file changed, 2 insertions(+)

意思是:这次提交修改了 1 个文件,新增了 2 行。

查看具体改动:

git show -- 开发学习规划.md

如果只看到你预期中的内容,就说明这次提交比较干净。

改坏了,怎么撤

撤销之前先判断一件事:这次改动提交了吗?

还没提交:用 restore

如果文件改坏了,但还没有提交,可以用:

git restore 文件名

例如:

git restore 开发学习规划.md

这会把文件恢复到上一次提交时的状态。

注意,这个操作会丢弃当前未提交修改。执行前先确认没有重要内容。

已经提交:优先用 revert

如果修改已经提交,不建议初学者直接用 git reset

更稳的方式是:

git revert 提交编号 --no-edit

例如:

git revert 2cf5460 --no-edit

Git 会生成一次新的撤销提交,类似:

67cade2 Revert "练习修改开发学习规划"

这表示 Git 没有删除历史,而是新增了一条撤销记录。

真实项目中,revert 通常比 reset 更适合初学者。原因很简单:它保留历史,出了问题也更容易解释和回头看。

分支:给 AI 一条实验线

分支是我觉得 AI 开发里最值得早点学的概念。

它可以理解成一条单独的实验线。main 是稳定版本,新功能放到分支里做。AI 改得好,再合并。AI 改坏了,先别慌,主线还在。

查看当前分支:

git branch

如果看到:

* main

说明当前在 main 分支。

创建并切换到新分支:

git switch-c practice-branch

再次查看:

git branch

应该看到:

  main
* practice-branch

在分支上修改文件后,照常提交:

git add 开发学习规划.md
git commit -m"在练习分支新增内容"

查看历史:

git log --oneline--decorate

你可能看到:

2d9c9a6 (HEAD -> practice-branch) 在练习分支新增内容
67cade2 (main) Revert "练习修改开发学习规划"
2cf5460 练习修改开发学习规划
0204a37 初始化开发学习文档

这表示当前在 practice-branch,并且这个分支比 main 多一次提交。

切回 main

git switch main

再切回练习分支:

git switch practice-branch

你会发现同一个文件,在不同分支上可以呈现不同内容。这就是分支的价值。

合并和删除分支

当分支上的改动确认没问题后,可以合并回 main

先切回主分支:

git switch main

合并分支:

git merge practice-branch

如果看到:

Fast-forward

可以先简单理解成:main 之前没有新变化,所以 Git 直接把主线往前移动到分支的最新位置。

合并后删除练习分支:

git branch -d practice-branch

查看当前分支:

git branch --show-current

如果输出:

main

再查看状态:

git status

如果输出:

On branch main
nothing to commit, working tree clean

说明本地仓库状态正常。

绑定 GitHub 远程仓库

本地 Git 仓库只保存在电脑上。

如果要同步到 GitHub,需要先在 GitHub 创建远程仓库。

远程仓库地址通常长这样:

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

绑定远程仓库:

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

查看绑定结果:

git remote -v

如果看到:

origin  https://github.com/你的用户名/你的仓库名.git (fetch)
origin  https://github.com/你的用户名/你的仓库名.git (push)

说明绑定成功。

这里的 origin 是远程仓库的默认名字。以后看到 origin,就可以理解成 GitHub 上的那个仓库。

第一次推送到 GitHub

第一次推送:

git push -u origin main

这一步可能会弹出 GitHub 登录窗口。按提示在浏览器里完成登录和授权即可。

如果成功,可能看到:

To https://github.com/你的用户名/你的仓库名.git
 * [new branch]      main -> main
branch 'main' set up to track 'origin/main'.

意思是:

  • 本地 main 分支已经推送到 GitHub;
  • GitHub 上也创建了 main 分支;
  • 本地 main 和远程 origin/main 建立了跟踪关系。

以后再次推送,不需要写完整命令,只需要:

git push

本地提交后,再推送到 GitHub

日常开发里,流程通常是这样:

git status
git diff
git add 开发学习规划.md
git commit -m"练习推送到 GitHub"
git push

推送成功后,再查看状态:

git status

如果看到:

On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree clean

说明本地和 GitHub 已经同步。

AI 开发中,我建议固定这套动作

使用 AI 写代码时,我建议先把下面这套流程变成肌肉记忆。

让 AI 改代码前

先确认仓库干净:

git status

如果不干净,先处理已有修改。否则 AI 的改动会和之前的改动混在一起,很难判断问题。

重要功能先开分支

git switch-c feature-功能名

例如:

git switch-c feature-login

这样 AI 的改动不会直接影响 main

AI 改完后先看差异

git diff

重点看这几类问题:

  • 是否改了不相关文件;
  • 是否删除了重要内容;
  • 是否暴露了密钥;
  • 是否把很多逻辑堆在一个文件里;
  • 是否修改了数据库结构;
  • 是否改动范围明显超过需求。

验证没问题后提交

git add .
git commit -m"完成某某功能"

合并回 main

git switch main
git merge feature-功能名
git push

如果 AI 改坏了

还没提交时:

git restore 文件名

已经提交时:

git revert 提交编号 --no-edit
git push

常用命令速查

基础状态:

git status
git log --oneline
git log --oneline--decorate

查看改动:

git diff
git diff-- 文件名
git show --stat 提交编号
git show 提交编号

提交:

git add 文件名
git add .
git commit -m"提交说明"

撤销:

git restore 文件名
git restore --staged 文件名
git revert 提交编号 --no-edit

分支:

git branch
git branch --show-current
git switch-c 分支名
git switch 分支名
git merge 分支名
git branch -d 分支名

远程仓库:

git remote -v
git remote add origin 仓库地址
git push -u origin main
git push
git pull

先学到这个程度就够了

如果你是为了 AI 独立开发软件而学 Git,第一阶段不用追求一次学完。

先把这些事做熟:

  • 安装状态检查;
  • 配置 Git 用户名和邮箱;
  • 初始化本地仓库;
  • 解决中文文件名显示问题;
  • 第一次提交;
  • 修改文件并查看差异;
  • 查看某次提交的具体改动;
  • 使用 git restore 撤销未提交修改;
  • 使用 git revert 安全撤销已提交修改;
  • 创建分支;
  • 在分支上修改并提交;
  • 合并分支;
  • 删除已合并分支;
  • 创建 GitHub 远程仓库;
  • 绑定 origin
  • 推送到 GitHub。

到这里,其实已经够支撑日常 AI 开发里的基本安全流程了。

后面如果继续学,可以再补 .gitignore、README、Pull Request、冲突解决、tag、多人协作、GitHub Actions、SSH key、私有仓库权限。

但那是下一阶段的事。

现阶段最重要的是形成一个习惯:每次让 AI 改代码前,先确认 Git 干净;每次 AI 改完后,先用 Git 检查差异;确认没问题后,再提交和推送。

这件事不复杂,但它能让一个人做软件时少很多慌张。