ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

AI时代-Git必须学

AI时代-Git必须学

写给还在用「复制一份备份」管理代码的你。

AI 已经能写代码了,很多人第一反应是:那我还学 Git 干嘛?

恰恰相反。AI 让代码产量翻了十倍,也让「改坏了怎么办」的概率翻了十倍。以前你一天写 200 行,改错了顶多重写;现在 AI 十分钟给你 800 行,一次跑偏,你可能连它动了哪些文件都说不清。

Git 不是「程序员的礼仪」,而是你让 AI 放手改代码的底气。有了版本控制,试错成本才接近于零:改坏了,回到上一个存档点,三十秒的事。

这篇文章基于 B 站《大学生扫盲课》第一期「Git、GitHub 和 Gitee 完整讲解」和它的配套手册整理,我在原内容基础上补了安装细节、报错排查,以及最后那节「AI 时代怎么用 Git」。零基础可以顺着读,有基础的可以直接跳到第十三节查命令表。

本文配套资源

  • 教程用到的软件包(Git / Sourcetree 安装包):https://ericweb.lanzouv.com/b00ybhrnba 密码:77xu
  • Git 官网:https://git-scm.com/downloads/win
  • Sourcetree 官网:https://www.sourcetreeapp.com/
  • 配套视频:B 站搜索「大学生扫盲课 Git GitHub Gitee」,BV 号BV1G8CFYvEjt

文章目录

    • 一、先把三个概念掰开:Git、GitHub、Gitee
    • 二、Git 到底在管什么:四个区域一张图
      • 2.1 工作区(Working Directory)
      • 2.2 暂存区(Staging Area / Index)
      • 2.3 本地仓库(Local Repository)
      • 2.4 远程仓库(Remote)
      • 2.5 命令与区域的对应关系
      • 2.6 commit 到底是什么:一张快照,不是一段差异
    • 三、10 分钟把环境装好
      • 3.1 安装 Git
      • 3.2 安装 Sourcetree(可选,但新手友好)
      • 3.3 第一次配置:署名
    • 四、第一个仓库:从 init 到 commit
      • 4.1 初始化仓库
      • 4.2 看看当前状态
      • 4.3 加入暂存区
      • 4.4 提交
      • 4.5 查看历史
      • 4.6 提交信息怎么写才不像废话
      • 4.7 忽略文件:.gitignore
    • 五、把代码推到云端:GitHub / Gitee
      • 5.1 建一个空仓库
      • 5.2 关联远程仓库并推送
      • 5.3 克隆别人的仓库
      • 5.4 拉取更新
      • 5.5 HTTPS 还是 SSH?
    • 六、SSH 免密:配置一次,之后 push 不再输密码
      • 6.1 生成密钥
      • 6.2 复制公钥
      • 6.3 粘贴到平台
      • 6.4 Sourcetree 用户注意:PuTTY 需要 .ppk
      • 6.5 测试连接
      • 6.6 同时用 GitHub 和 Gitee:配置多密钥
      • 6.7 连不上怎么办
    • 七、分支:Git 真正的杀手锏
      • 7.1 一条完整的分支流程
      • 7.2 常用分支命令
      • 7.3 冲突:不是报错,是 Git 在问你意见
      • 7.4 分支怎么命名
    • 八、团队协作:Fork + Pull Request
      • 8.1 你没有写权限,也能贡献代码
      • 8.2 公司内部通常不 Fork
      • 8.3 一个好的 PR 长什么样
    • 九、GitHub 和 Gitee 的核心功能对照
      • 选哪个?
    • 十、撤销与后悔药:这 8 个场景,覆盖 95% 的翻车现场
      • 10.1 reset 的三种模式
      • 10.2 已经 push 了就别用 reset
      • 10.3 reflog:误操作后的最后一道保险
    • 十一、AI 时代,Git 工作流该怎么改
      • 11.1 让 AI 动手之前,先开分支
      • 11.2 一次只让 AI 做一件事
      • 11.3 每次 AI 改完,先看 diff 再提交
      • 11.4 密钥永远不进仓库
      • 11.5 用 tag 标记「能跑的版本」
      • 11.6 AI 写的代码,也要有人负责
    • 十二、新手最容易踩的 10 个坑
    • 十三、命令速查表
    • 十四、写在最后
      • 学习路线建议

一、先把三个概念掰开:Git、GitHub、Gitee

新手最容易糊的地方,是把这三个东西当成一回事。其实它们的关系特别像「相机 / 云相册 / 另一个云相册」。

名字是什么类比是否需要联网
Git本地版本控制工具,装在你自己电脑上发动机不需要
GitHub全球最大的代码托管平台(微软旗下)云端车库(国外)需要
Gitee国内的代码托管平台,访问快云端车库(国内)需要
SourcetreeGit 的图形界面客户端仪表盘和方向盘不需要

记住一句话:Git 是工具,GitHub / Gitee 是网站。你完全可以只用 Git 不联网,本地照样能提交、能回滚、能开分支;平台的作用是备份、协作和展示。

至于 Sourcetree,它只是把git add、git commit这些命令变成了按钮。用它可以,但别只会用它——换台电脑、连服务器、看 CI 日志的时候,只有命令行靠得住。


二、Git 到底在管什么:四个区域一张图

这是全文最重要的一张图。看懂它,80% 的命令你就知道该在什么时候用了。

2.1 工作区(Working Directory)

就是你打开文件夹能看到的那些文件,你正在编辑的地方。这里的改动 Git 看得见,但还没打算记录。

2.2 暂存区(Staging Area / Index)

一个中间层,存放「这次准备提交的改动」。

很多人会问:为什么不能直接提交,非要多一个暂存区?

因为真实开发里,你一次改动往往夹杂着好几件事:修了个 bug、顺手改了个文案、还调试输出了一行console.log。如果没有暂存区,你只能全部提交或者全部不提交。有了暂存区,你可以只把修 bug 的那两个文件放进去,其它留着下次——这就是「一个提交只做一件事」的技术基础。

2.3 本地仓库(Local Repository)

项目根目录下那个隐藏的.git文件夹。所有提交历史、分支、标签都在里面。

划重点:.git目录就是整个仓库的灵魂,删了它,历史就没了。它不会同步到网盘,也别手动去改里面的文件。

2.4 远程仓库(Remote)

GitHub / Gitee 上的那份。它的意义有三个:备份、多人协作、对外展示。

2.5 命令与区域的对应关系

你做的动作命令数据流向
改文件编辑器保存工作区变化
把改动放进暂存区git add <文件>工作区 → 暂存区
把暂存区存成一个版本git commit -m "说明"暂存区 → 本地仓库
推到云端git push本地仓库 → 远程仓库
拉取云端更新git pull远程仓库 → 本地仓库 + 工作区
撤销工作区改动git restore <文件>丢弃工作区修改
把文件移出暂存区git restore --staged <文件>暂存区 → 工作区

⚠️ 一句话总结:只有 commit 过的代码,Git 才真的记得;只有 push 过的代码,别人才看得到。

2.6 commit 到底是什么:一张快照,不是一段差异

每次git commit,Git 都会给当前所有文件拍一张「快照」,并记下:谁提交的、什么时候、提交说明、上一张快照是谁。这些快照串起来,就是一棵可以回溯的树。

所以git log看到的不只是日志,而是你的后悔药清单。


三、10 分钟把环境装好

3.1 安装 Git

  1. 打开 https://git-scm.com/downloads/win,下载64-bit Git for Windows Setup(也可以直接用文首云盘里的安装包)。
  2. 双击安装,绝大部分选项保持默认。只有几处建议留意:
    • 默认编辑器:装了 VS Code 就选 VS Code,没装就选 Notepad++,别选 Vim(新手进去出不来)。
    • PATH 环境变量:保持默认的「Git from the command line and also from 3rd-party software」。
    • SSH 客户端:选「Use bundled OpenSSH」。
    • 换行符转换:保持默认的「Checkout Windows-style, commit Unix-style」。
  3. 装完打开 Git Bash(或 CMD / PowerShell),验证:
git--version# git version 2.4x.x.windows.1

看到版本号就成功了。

3.2 安装 Sourcetree(可选,但新手友好)

  1. 到 https://www.sourcetreeapp.com/ 下载 Windows 版。
  2. 首次启动需要登录 / 注册一个 Atlassian 账号(免费),过程中会问要不要装 Jira,跳过即可。
  3. 它会自动检测你电脑上的 Git;如果没检测到,在「工具 → 选项 → Git」里手动指定git.exe路径。
  4. SSH 客户端这一项很关键:
    • 选OpenSSH:和命令行共用一套密钥,推荐。
    • 选PuTTY/Plink:需要用.ppk格式的私钥(后面 6.4 节讲怎么生成)。

3.3 第一次配置:署名

Git 要求每次提交都记录作者,所以装完必须先配置身份。这两行只需要做一次,之后所有仓库通用。

gitconfig--globaluser.name"你的名字"gitconfig--globaluser.email"你的邮箱"

建议再加三条「新手友好」配置:

# 新仓库默认分支叫 main(和 GitHub / Gitee 保持一致)gitconfig--globalinit.defaultBranch main# 让中文文件名正常显示,而不是 \344\275\240 这种八进制gitconfig--globalcore.quotepathfalse# Windows 下自动处理换行符,避免整个文件显示被修改gitconfig--globalcore.autocrlftrue

检查配置结果:

gitconfig--global--list

💡 邮箱建议和你 GitHub / Gitee 账号的邮箱一致,否则平台上的提交记录不会算到你头上(头像会是灰的)。


四、第一个仓库:从 init 到 commit

我们用一个真实的小项目走一遍全流程。

4.1 初始化仓库

mkdirgit-democdgit-demogitinit

执行完会看到Initialized empty Git repository in .../git-demo/.git/,并且目录下多了一个隐藏的.git文件夹——这就是仓库本体。

4.2 看看当前状态

新建一个README.md,随便写两行,然后:

gitstatus

输出大概是这样:

On branch main No commits yet Untracked files: (use "git add <file>..." to include in what will be committed) README.md nothing added to commit but untracked files present (use "git add" to track)

Untracked files表示这个文件 Git 还没开始管。养成习惯:动手之前先git status,它永远不会骗你。

4.3 加入暂存区

gitaddREADME.md# 或者添加当前目录下所有改动gitadd.

再git status,文件名会变成绿色,提示Changes to be committed——说明它已经躺在暂存区了。

4.4 提交

gitcommit-m"docs: 添加项目说明"

到这里,第一个存档点就诞生了。

4.5 查看历史

gitlog# 完整版:提交 hash、作者、日期、说明gitlog--oneline# 精简版:一行一条gitlog--oneline--graph--decorate--all# 图形化,带分支名

输出:

$ git log --oneline a1b2c3d docs: 添加项目说明 $ git log --oneline --graph --decorate * a1b2c3d (HEAD -> main) docs: 添加项目说明

HEAD指向你当前所在的位置,也就是最新的一次提交。

4.6 提交信息怎么写才不像废话

对比一下:

  • ❌update、修改、1
  • ✅feat: 新增用户登录页
  • ✅fix: 修复退出登录后仍显示用户名的问题
  • ✅docs: 补充本地启动步骤

推荐用约定式提交(Conventional Commits)的前缀:feat(新功能)、fix(修 bug)、docs(文档)、refactor(重构)、style(格式)、chore(杂项)。半年后回来看,你会感谢现在的自己。

💡 提交信息写「为什么」,而不是「改了什么」。代码 diff 已经告诉你改了什么了,只有你知道为什么。

4.7 忽略文件:.gitignore

node_modules、dist、.idea、日志、编译产物这些东西不该进仓库。在项目根目录建一个.gitignore:

# 依赖 node_modules/ venv/ __pycache__/ # 构建产物 dist/ build/ *.exe # 编辑器 .idea/ .vscode/ # 敏感信息 .env *.key *.pem

如果某个文件已经被提交过,再加.gitignore是没用的,要先把它从索引里移除:

gitrm--cached.envgitcommit-m"chore: 移除误提交的环境变量文件"

五、把代码推到云端:GitHub / Gitee

5.1 建一个空仓库

GitHub:右上角+→ New repository → 填名字 → 选 Public / Private(私有仓库别人看不到)→不要勾选“Add a README file”(你本地已经有了,勾了会造成两个不相干的历史)→ Create repository。

Gitee:右上角+→ 新建仓库 → 同样不要勾「使用 Readme 文件初始化这个仓库」。

建完你会看到一个仓库地址,有两种形式:

HTTPS: https://github.com/用户名/仓库名.git SSH: git@github.com:用户名/仓库名.git

💡 还没配 SSH 的话,下面这一步先填 HTTPS 地址,等第六节配好密钥后再换成 SSH:
git remote set-url origin git@github.com:用户名/仓库名.git

5.2 关联远程仓库并推送

# 关联远程仓库,给它起名叫 origin(约定俗成)gitremoteaddorigin git@github.com:你的用户名/git-demo.git# 确认分支名是 maingitbranch-Mmain# 第一次推送,-u 把本地 main 和远程 main 绑定,之后直接 git push 就行gitpush-uorigin main

5.3 克隆别人的仓库

gitclone git@github.com:用户名/仓库名.git

克隆会自动完成三件事:下载全部历史、创建本地仓库、把远程地址记成origin。

5.4 拉取更新

gitpull

git pull等于git fetch+git merge。团队协作时更推荐:

gitpull--rebase

它会把你的本地提交「挪」到最新代码之后,历史是一条直线,不会多出一堆「Merge branch ‘main’ of …」的噪音提交。

5.5 HTTPS 还是 SSH?

对比项HTTPSSSH
地址https://github.com/...git@github.com:...
认证账号密码 / Token密钥对
是否要反复输入需要(除非配置凭据缓存)配置一次,永久免密
国内网络相对容易连上22 端口偶尔被墙
推荐场景临时克隆、公司限制端口日常开发

结论:长期开发一律用 SSH。下面就来配。


六、SSH 免密:配置一次,之后 push 不再输密码

原理很简单:你在本地生成一对密钥,公钥(可以公开)贴到平台上,私钥(绝不能外传)留在自己电脑。之后每次通信,平台用公钥验证「你手里确实有那把私钥」。

6.1 生成密钥

ssh-keygen-trsa-b4096-C"你的邮箱"
  • -t rsa:密钥类型,RSA
  • -b 4096:密钥长度,越长越安全
  • -C:备注,一般写邮箱,方便在平台上区分

连按三次回车即可(保存路径默认、密码留空)。想更现代一点,可以用-t ed25519,更短更安全,GitHub / Gitee 都支持。

生成后,~/.ssh/目录下会多出两个文件:

id_rsa ← 私钥,谁都不能给 id_rsa.pub ← 公钥,要贴到平台上

Windows 下的完整路径是C:\Users\你的用户名\.ssh\。

6.2 复制公钥

cat~/.ssh/id_rsa.pub

把输出的一整行复制走(以ssh-rsa开头,以邮箱结尾)。或者用记事本打开id_rsa.pub全选复制。

⚠️ 千万别复制错文件。id_rsa是私钥,贴出去等于把家门钥匙挂网上。

6.3 粘贴到平台

GitHub:右上角头像 → Settings → 左侧 SSH and GPG keys → New SSH key → Title 随便填(比如「我的笔记本」)→ Key 粘贴公钥 → Add SSH key。

Gitee:右上角头像 → 设置 → 左侧「安全设置」→ SSH 公钥 → 标题随便填 → 粘贴公钥 → 确定。

6.4 Sourcetree 用户注意:PuTTY 需要 .ppk

如果你在 Sourcetree 里把 SSH 客户端选成了PuTTY/Plink,它认不了id_rsa,必须转成.ppk格式:

  1. Sourcetree 菜单栏 →工具 → 创建或导入 SSH 密钥(会打开 PuTTYgen)。
  2. 点Load,选择C:\Users\你的用户名\.ssh\id_rsa(记得把文件类型筛选改成「All Files」才看得到)。
  3. 点Save private key,忽略「是否保存无密码短语的密钥」的提示,存成id_rsa.ppk。
  4. 回到 Sourcetree → 工具 → 选项 → 一般 → SSH 客户端设置里指定这个.ppk。

这一步是视频里漏讲、后来在分 P 补上的部分,卡在这儿的人不少。

6.5 测试连接

ssh-Tgit@github.comssh-Tgit@gitee.com

第一次连接会问Are you sure you want to continue connecting?,输入yes回车。

成功的话会看到类似:

Hi 你的用户名! You've successfully authenticated, but GitHub does not provide shell access.

看到successfully authenticated就说明通了。之后git push再也不会问密码。

6.6 同时用 GitHub 和 Gitee:配置多密钥

两个平台用同一把密钥也能用,但更规范的做法是各自一把,然后在~/.ssh/config里分配:

Host github.com HostName github.com User git IdentityFile ~/.ssh/id_rsa_github Host gitee.com HostName gitee.com User git IdentityFile ~/.ssh/id_rsa_gitee

生成第二把密钥时指定文件名:

ssh-keygen-trsa-b4096-C"你的邮箱"-f~/.ssh/id_rsa_gitee

6.7 连不上怎么办

现象原因解决
Permission denied (publickey)公钥没贴、贴错、或用的不是同一把私钥重新cat公钥核对,ssh -T -v git@github.com看调试日志
Connection timed out22 端口被网络屏蔽改走 443 端口,见下方配置
Host key verification failedknown_hosts里旧记录冲突删掉~/.ssh/known_hosts里对应那一行重试

22 端口不通时,在~/.ssh/config里加:

Host github.com HostName ssh.github.com Port 443 User git

七、分支:Git 真正的杀手锏

如果只能保留一个 Git 功能,我选分支。它让你可以「同时存在于多条时间线」,改坏了直接扔掉,主线毫发无伤。

7.1 一条完整的分支流程

# 1. 从当前分支拉出新分支并切过去gitswitch-cfeature/login# 2. 正常写代码,然后提交gitadd.gitcommit-m"feat: 新增登录页面"# 3. 切回主线,先拉最新代码gitswitch maingitpull# 4. 合并分支gitmerge feature/login# 5. 合并完删掉分支(本地)gitbranch-dfeature/login

git checkout -b和git switch -c是一回事。新版本 Git 把「切换分支」和「恢复文件」拆成了switch和restore两个命令,语义更清楚,建议新人直接用新命令。

7.2 常用分支命令

gitbranch# 查看本地分支gitbranch-a# 查看所有分支(含远程)gitswitch main# 切换分支gitbranch-dfeature/x# 删除已合并的分支gitbranch-Dfeature/x# 强制删除(没合并也删)

7.3 冲突:不是报错,是 Git 在问你意见

两个人改了同一个文件的同一行,Git 不敢替你决定,于是报冲突。解决流程只有四步:

  1. git status会告诉你哪些文件both modified。
  2. 打开文件,会看到这样的标记:
<<<<<<< HEAD const API = "https://api.old.com"; ======= const API = "https://api.new.com"; >>>>>>> feature/login
  1. 手动改成你想要的最终结果,把<<<<<<<、=======、>>>>>>>这三行全部删掉。
  2. 重新提交:
gitadd.gitcommit-m"fix: 解决 API 地址冲突"

💡 冲突不可怕,可怕的是你留着那些尖括号就提交了——代码里会直接多出一堆乱码。

7.4 分支怎么命名

feature/功能名 新功能 fix/问题描述 修 bug hotfix/紧急问题 线上急救 docs/文档更新 只改文档

别用test、aaa、dev2、新分支这种名字。三个月后你打开分支列表,会想打自己。


八、团队协作:Fork + Pull Request

8.1 你没有写权限,也能贡献代码

开源项目的标准姿势:

  1. 在项目页点Fork,把仓库复制一份到你自己的账号下。
  2. git clone你 fork 出来的那份到本地。
  3. 拉分支、改代码、commit、git push到你自己的仓库。
  4. 回到原项目页面,点Pull Request(Gitee 叫「Pull Request」或「合并请求」),选择你的分支,写清楚改了什么、为什么改。
  5. 维护者 review 后合并,你的名字就进了贡献者列表。

8.2 公司内部通常不 Fork

内部协作一般直接给成员仓库写权限,流程简化成:拉分支 → push → 提 PR → 同事 review → 合并。分支保护规则会禁止直接 push 到 main,这一步是强制的,不是形式主义。

8.3 一个好的 PR 长什么样

## 这个 PR 做了什么 新增手机号验证码登录,支持 60 秒倒计时。 ## 为什么要做 产品需求 #1024,目前只能密码登录,手机号用户转化率低。 ## 怎么验证 1. 进入登录页,切换到「验证码登录」 2. 输入手机号,点击获取验证码 3. 输入收到的 6 位数字,登录成功 ## 影响范围 只改动登录模块,未触碰其他页面。

Review 的人最想知道的就三件事:改了什么、为什么改、怎么验。写清楚这三点,合并速度快一倍。


九、GitHub 和 Gitee 的核心功能对照

两个平台的功能大差不差,但细节有差异。这张表来自配套手册,我又补了一列实际使用感受:

功能GitHubGitee实际感受
Fork复制项目到个人账户同样支持用法一致
Star收藏项目同样支持国内访问 Gitee 更快
Watch订阅项目动态支持动态订阅开源项目必开
Issues问题追踪、待办管理支持,更本地化GitHub 生态和搜索更强
Pull Request代码评审 + 合并请求类似功能GitHub 的 review 体验更成熟
Actions强大的 CI/CD 工作流不支持 Actions(有自研的 Gitee Go)想学 CI/CD 只能选 GitHub
Pages免费托管静态网站提供类似功能(Gitee Pages)博客、文档站都能放
Releases发布版本、提供下载同样支持发安装包很方便
Webhooks自动消息通知支持类似功能接钉钉/企业微信更顺手

选哪个?

  • 学技术、参与开源、看优秀项目→ GitHub。全球的优质开源项目基本都在上面,Actions 也是必学技能。
  • 国内团队协作、企业内网、追求访问速度→ Gitee。和钉钉、企业微信集成更顺,私有仓库免费额度对小组够用。
  • 成年人全都要:本地一个仓库,配两个 remote,同时推到两边。
gitremoteaddgithub git@github.com:用户名/仓库.gitgitremoteaddgitee git@gitee.com:用户名/仓库.gitgitpush github maingitpush gitee main

十、撤销与后悔药:这 8 个场景,覆盖 95% 的翻车现场

新手最怕的就是「我是不是把代码搞没了」。下面这张表建议收藏:

场景命令说明
文件改乱了,还没 addgit restore <文件>丢弃工作区修改,恢复到上次提交
想丢弃所有未暂存的修改git restore .慎用,不可恢复
add 错了,想撤出暂存区git restore --staged <文件>文件改动还在,只是不在暂存区
commit 了但没 push,想改说明git commit --amend -m "新说明"只适合最近一次提交
commit 了没 push,想撤销提交git reset --soft HEAD~1撤销提交,改动还在暂存区
push 了想撤销git revert <commit>生成一条反向提交,历史保留,协作安全
想看被 reset 掉的东西git reflogGit 的操作日志,救命的最后一根稻草
改到一半要切分支git stash/git stash pop先把改动收起来,回来再放出来

10.1 reset 的三种模式

gitreset--softHEAD~1# 只撤销 commit,改动留在暂存区gitreset--mixedHEAD~1# 撤销 commit 和 add,改动留在工作区(默认)gitreset--hardHEAD~1# 彻底回退,改动全部丢弃 ⚠️

--hard是唯一会真正丢代码的选项,用之前先git status确认一遍。

10.2 已经 push 了就别用 reset

reset会改写历史。如果别人已经拉过你的提交,你 reset 再强推,别人的本地历史就会和你分叉,团队里最容易吵架的就是这个。

已推送的提交,一律用git revert:它不删历史,而是新增一条「反向操作」的提交,谁都不会受影响。

10.3 reflog:误操作后的最后一道保险

gitreflog

它会列出你本地所有 HEAD 的移动记录,包括 reset、rebase、切分支。找到那条HEAD@{n},再git reset --hard HEAD@{n}就能回去。

只要.git还在,提交过的东西基本都能找回来。


十一、AI 时代,Git 工作流该怎么改

这是我自己用下来最有效的一套,和传统流程只差几个细节,但安全感完全不同。

11.1 让 AI 动手之前,先开分支

gitswitch-cai/refactor-user-service

AI 一次能改十几个文件,你不可能逐行记住它动了什么。放在独立分支上,跑不通就直接git switch main扔掉,主线永远干净。

11.2 一次只让 AI 做一件事

「帮我重构整个项目」是最容易失控的指令。正确姿势是拆成小任务,每个任务一个 commit:

feat: 抽出用户服务的 DTO refactor: 用户查询改用新 DTO test: 补充用户服务单元测试

这样出问题时,git revert一条就能回退,不用在 800 行 diff 里找那一行。

11.3 每次 AI 改完,先看 diff 再提交

gitdiff# 看工作区改了什么gitdiff--staged# 看暂存区准备提交什么

AI 会「顺手」改掉一些你没让它改的东西:删掉它认为没用的注释、格式化整个文件、把配置换成它熟悉的写法。diff 是你和 AI 之间的最后一道人工审核。

11.4 密钥永远不进仓库

AI 很容易在示例代码里写死一串sk-xxxx。提交前确认.gitignore里有:

.env .env.* *.key *.pem config.local.*

万一已经推上去了,光删文件没用——历史里还在。要立刻:吊销那把密钥 → 换新的 → 再用git filter-repo清理历史。先换密钥,再清历史,顺序不能反。

11.5 用 tag 标记「能跑的版本」

AI 改崩过几次之后,你会格外珍惜「上一个能跑的版本」:

gittag-av1.0.0-m"登录功能完成,可演示"gitpush origin v1.0.0

出事了git switch v1.0.0就能回到那个状态,比翻 log 找 commit hash 快得多。

11.6 AI 写的代码,也要有人负责

git blame会显示每一行是谁提交的。AI 生成的代码,提交人是你——责任不会因为「这是 AI 写的」而转移。所以 PR 里的 review、测试、回滚预案,一个都不能省。


十二、新手最容易踩的 10 个坑

1. 装完不配 user.name / user.email
提交记录里作者是一串随机字符,平台上不算你的贡献。git config --global --list检查一下。

2. 在错误的目录git init
不小心在桌面或者整个用户目录初始化了仓库,之后git status卡半天。删掉那个.git目录即可(注意别删错项目的)。

3. 把 node_modules 提交了
第一次git add .之前,先把.gitignore写好。已经提交了就git rm -r --cached node_modules。

4. push 被拒:rejected - non-fast-forward
远程有你本地没有的提交。先git pull --rebase,解决冲突后再 push。

5. 冲突没解决就 commit
文件里还留着<<<<<<<,代码直接报语法错误。提交前全局搜一下这几个符号。

6. 直接在 main 上改代码
改到一半要紧急修 bug,切分支都切不了。永远从 main 拉新分支再动手。

7. 手贱删了 .git
历史全没,只剩当前文件。删之前想清楚,.git不是缓存。

8. 用 HTTPS 地址却配了 SSH 密钥
地址是https://开头,Git 根本不会用 SSH 密钥。改成git@开头,或者git remote set-url origin git@...。

9. 中文文件名显示成八进制
git config --global core.quotepath false。

10. 提交了密码 / Token
立刻吊销并更换,然后清历史。不要只是再提交一次「删除密码」,历史里还在。


十三、命令速查表

# ---------- 初始化 ----------gitinit# 初始化仓库gitclone<url># 克隆远程仓库gitconfig--globaluser.name"名字"# 配置用户名gitconfig--globaluser.email"邮箱"# 配置邮箱# ---------- 日常三件套 ----------gitstatus# 看状态gitadd.# 全部加入暂存区gitcommit-m"feat: 说明"# 提交gitlog--oneline--graph--all# 看历史# ---------- 分支 ----------gitbranch# 列出分支gitswitch-c<name># 新建并切换gitswitch<name># 切换gitmerge<name># 合并到当前分支gitbranch-d<name># 删除分支# ---------- 远程 ----------gitremote-v# 查看远程地址gitremoteaddorigin<url># 关联远程gitpush-uorigin main# 首次推送gitpush# 之后推送gitpull--rebase# 拉取并变基# ---------- 撤销 ----------gitrestore<file># 丢弃工作区修改gitrestore--staged<file># 移出暂存区gitreset--softHEAD~1# 撤销最近一次提交(保留改动)gitrevert<commit># 反向提交(已推送时用)gitstash /gitstash pop# 暂存 / 恢复现场gitreflog# 操作日志,救命用

十四、写在最后

回到标题:AI 时代,Git 必须学吗?

我的答案是:AI 越能干,Git 越重要。

因为 AI 把「写代码」的成本降到了几乎为零,同时把「判断这段代码对不对」的成本抬到了最高。你会有大量「试试看」的时刻——试试这个重构,试试那个方案,试试让 AI 换个思路重写。

试错的次数越多,回滚能力就越值钱。

Git 教给你的其实不是几个命令,而是一种工作方式:

  • 动手前先分叉(开分支);
  • 每一步都留痕(小步提交);
  • 出问题能退回(reset / revert);
  • 让别人看得懂(提交信息、PR 描述)。

这四件事,和 AI 有没有出现,没有任何关系。

学习路线建议

阶段目标大概耗时
第 1 天装好环境、配置身份、跑通 init → add → commit → log1 小时
第 2 天建 GitHub / Gitee 仓库,配好 SSH,成功 push1 小时
第 3 天练分支:开分支 → 改代码 → 合并 → 删分支,走三遍1 小时
第 4 天学撤销:restore / reset / revert / reflog 各试一次1 小时
第 1 周把自己的一个小项目托管上去,每天至少一次提交持续

一周之后,你就不会再问「Git 怎么用了」,只会问「这个冲突怎么解」。


参考资料

  • 视频:B 站《【大学生扫盲课】1 Git、GitHub 和 Gitee 完整讲解:从基础到进阶功能》(UP:左岚,BV1G8CFYvEjt)
  • 配套手册:《Git、GitHub 和 Gitee 完整讲解:从基础到进阶功能》
  • 官方文档:Git 官方文档、GitHub Docs、Gitee 帮助中心
  • 软件包:https://ericweb.lanzouv.com/b00ybhrnba(密码77xu)

如果这篇对你有帮助,点个赞再走。评论区告诉我你踩过最离谱的 Git 坑,我挑几个补充到下一篇里。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进