写给还在用「复制一份备份」管理代码的你。
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 | 国内的代码托管平台,访问快 | 云端车库(国内) | 需要 |
| Sourcetree | Git 的图形界面客户端 | 仪表盘和方向盘 | 不需要 |
记住一句话: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
- 打开 https://git-scm.com/downloads/win,下载64-bit Git for Windows Setup(也可以直接用文首云盘里的安装包)。
- 双击安装,绝大部分选项保持默认。只有几处建议留意:
- 默认编辑器:装了 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」。
- 装完打开 Git Bash(或 CMD / PowerShell),验证:
git--version# git version 2.4x.x.windows.1看到版本号就成功了。
3.2 安装 Sourcetree(可选,但新手友好)
- 到 https://www.sourcetreeapp.com/ 下载 Windows 版。
- 首次启动需要登录 / 注册一个 Atlassian 账号(免费),过程中会问要不要装 Jira,跳过即可。
- 它会自动检测你电脑上的 Git;如果没检测到,在「工具 → 选项 → Git」里手动指定
git.exe路径。 - 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 main5.3 克隆别人的仓库
gitclone git@github.com:用户名/仓库名.git克隆会自动完成三件事:下载全部历史、创建本地仓库、把远程地址记成origin。
5.4 拉取更新
gitpullgit pull等于git fetch+git merge。团队协作时更推荐:
gitpull--rebase它会把你的本地提交「挪」到最新代码之后,历史是一条直线,不会多出一堆「Merge branch ‘main’ of …」的噪音提交。
5.5 HTTPS 还是 SSH?
| 对比项 | HTTPS | SSH |
|---|---|---|
| 地址 | 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格式:
- Sourcetree 菜单栏 →工具 → 创建或导入 SSH 密钥(会打开 PuTTYgen)。
- 点Load,选择
C:\Users\你的用户名\.ssh\id_rsa(记得把文件类型筛选改成「All Files」才看得到)。 - 点Save private key,忽略「是否保存无密码短语的密钥」的提示,存成
id_rsa.ppk。 - 回到 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_gitee6.7 连不上怎么办
| 现象 | 原因 | 解决 |
|---|---|---|
Permission denied (publickey) | 公钥没贴、贴错、或用的不是同一把私钥 | 重新cat公钥核对,ssh -T -v git@github.com看调试日志 |
Connection timed out | 22 端口被网络屏蔽 | 改走 443 端口,见下方配置 |
Host key verification failed | known_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 不敢替你决定,于是报冲突。解决流程只有四步:
git status会告诉你哪些文件both modified。- 打开文件,会看到这样的标记:
<<<<<<< HEAD const API = "https://api.old.com"; ======= const API = "https://api.new.com"; >>>>>>> feature/login- 手动改成你想要的最终结果,把
<<<<<<<、=======、>>>>>>>这三行全部删掉。 - 重新提交:
gitadd.gitcommit-m"fix: 解决 API 地址冲突"💡 冲突不可怕,可怕的是你留着那些尖括号就提交了——代码里会直接多出一堆乱码。
7.4 分支怎么命名
feature/功能名 新功能 fix/问题描述 修 bug hotfix/紧急问题 线上急救 docs/文档更新 只改文档别用test、aaa、dev2、新分支这种名字。三个月后你打开分支列表,会想打自己。
八、团队协作:Fork + Pull Request
8.1 你没有写权限,也能贡献代码
开源项目的标准姿势:
- 在项目页点Fork,把仓库复制一份到你自己的账号下。
git clone你 fork 出来的那份到本地。- 拉分支、改代码、commit、
git push到你自己的仓库。 - 回到原项目页面,点Pull Request(Gitee 叫「Pull Request」或「合并请求」),选择你的分支,写清楚改了什么、为什么改。
- 维护者 review 后合并,你的名字就进了贡献者列表。
8.2 公司内部通常不 Fork
内部协作一般直接给成员仓库写权限,流程简化成:拉分支 → push → 提 PR → 同事 review → 合并。分支保护规则会禁止直接 push 到 main,这一步是强制的,不是形式主义。
8.3 一个好的 PR 长什么样
## 这个 PR 做了什么 新增手机号验证码登录,支持 60 秒倒计时。 ## 为什么要做 产品需求 #1024,目前只能密码登录,手机号用户转化率低。 ## 怎么验证 1. 进入登录页,切换到「验证码登录」 2. 输入手机号,点击获取验证码 3. 输入收到的 6 位数字,登录成功 ## 影响范围 只改动登录模块,未触碰其他页面。Review 的人最想知道的就三件事:改了什么、为什么改、怎么验。写清楚这三点,合并速度快一倍。
九、GitHub 和 Gitee 的核心功能对照
两个平台的功能大差不差,但细节有差异。这张表来自配套手册,我又补了一列实际使用感受:
| 功能 | GitHub | Gitee | 实际感受 |
|---|---|---|---|
| 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% 的翻车现场
新手最怕的就是「我是不是把代码搞没了」。下面这张表建议收藏:
| 场景 | 命令 | 说明 |
|---|---|---|
| 文件改乱了,还没 add | git 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 reflog | Git 的操作日志,救命的最后一根稻草 |
| 改到一半要切分支 | 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-serviceAI 一次能改十几个文件,你不可能逐行记住它动了什么。放在独立分支上,跑不通就直接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 → log | 1 小时 |
| 第 2 天 | 建 GitHub / Gitee 仓库,配好 SSH,成功 push | 1 小时 |
| 第 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 坑,我挑几个补充到下一篇里。