Appearance
Git 是干什么的?
导读
Git 是本地的时间机器:把整个项目一次次拍成完整快照,核心动作只有提交和读档。懂了四个区域、分支、回滚和 .gitignore,AI 说「已暂存」「已推送」时你就不会一头雾水。
Git 的核心动作只有两个:提交和读档。
- 提交:给整个项目拍一张完整快照。
- 读档:回到任意一次提交的状态。
为什么我强烈推荐你使用 Git
耦合性,就是模块和模块之间绑得多紧。
- 高耦合:模块缠得很紧,A 改一点点,B、C 全跟着改,牵一发动全身。难维护、容易出 bug,改一处崩一片。
- 低耦合:模块互相独立,只通过简单接口打交道,内部细节互不关心。改 A 基本不影响 B,好测试、好维护。
打个比方:
低耦合像乐高,每块独立,随时能换一块、拼新的;
高耦合像毛线团,缠在一起,想抽一根线,整团跟着乱。
而程序员追求低耦合性,主要是为了一个额外的奖励:可拓展性——想加新功能,往“插槽”里塞一块新的就行,不用把老代码拆了重拼。
但低耦合有代价:一个程序被拆成成百上千个文件,互相用复杂逻辑连接。维护、开发和测试使得版本管理变得几乎不可能完成。
结论:Git 就是为这种复杂度而生的——它让你敢于拆分,而不必担心失控。
普通的保存,是用新版本覆盖旧版本;而 Git 的每一次「提交」,都是给整个项目拍一张完整的快照。无论项目有 10 个文件还是 10 万个文件,无论你改了 1 行还是 1000 行,Git 都会忠实地记下这一刻所有文件的完整状态。
这意味着:
- 后悔自由:任何时候,你都可以把项目精准地「读档」回任意一次提交的状态;
- 平行宇宙:你可以基于任何一个快照,分叉出一条新的时间线去大胆尝试;
- 协作不冲突:每个人在自己的时间线上工作,最后再把各自的快照合并到一起。
四个区域:工作区、暂存区、本地仓库、远程仓库
理解 Git 的四个区域,否则 AI 说「已暂存」「已提交」「已推送」时,就会一头雾水。
text
工作区 --git add--> 暂存区 --git commit--> 本地仓库 --git push--> 远程仓库
工作区 <--git restore-- 暂存区/本地仓库 <--git pull/fetch-- 远程仓库打个比方:
- 工作区:就是字面意思。
- 暂存区:接受、拒绝 diff 的这个过程,就是
git add,也就是把代码放到了暂存区。 - 本地仓库:点击「提交」以后会弹出一个
git commit message的“对账单”,这时候需要你去写日志(记得点保存,否则不生效)。等你确认了这份对账单以后,才算是真正被拍了快照,存到了本地仓库。 - 远程仓库:就是上传到 GitHub。
注意
.git目录就是本地仓库的核心,不要手动删改里面的内容。不要用 OneDrive、iCloud、坚果云这类同步盘去同步,因为网盘可能在 Git 写入一半时把文件同步走,轻则分支错乱,重则仓库损坏。
你可以把一切的环节都扔给 AI,让 AI 来完成,而且也推荐这样做。它更快,效率更高,笔记也完整。
分支
分支功能经常应用于测试环节。例如假设你同时有两个好点子,都想试一试,那可以从 main 分出去,在分支上大胆尝试,失败了就丢掉,成功了再合并回来。
默认主线通常叫 main。你可以这样理解:
main:稳定主线,最好随时能跑。feat/phone-login:正在做的功能分支。fix/token-expired:正在修的 bug 分支。
建议在两种情况下开:
- AI 要进行大改、重构、换架构;
- 你想尝试一个不一定成功的方案。
同样的,你可以直接让 AI 去帮你执行这部分操作:
text
请为「手机号登录」创建一个功能分支 feat/phone-login。
在这个分支上完成修改,完成后告诉我如何合并回 main。
每一步先解释,不要直接动 main。合并时可能会遇到冲突。记得让 AI 识别一下:
text
合并时如果有冲突,请先列出冲突文件、冲突位置和两种选择的区别。
等我确认后再修改。后悔自由:restore、revert、reset
Git 的核心价值之一是后悔自由。其中原理不需要理会,理解下列的提示词足够了:
一条回滚提示词:
text
我想撤销提交 <hash>,但希望保留历史。
执行前先解释会发生什么,并告诉我如何验证回滚成功。铁律:任何回滚前,先提交当前改动或开一个备份分支。 不要让 AI 直接 reset --hard。
退回的几种情况
情况一:改错了,但还没提交。
让 AI 用 git restore <file> 丢弃工作区修改。注意,这会直接丢掉你未保存的改动。
情况二:已经提交,但还没推送。
可以用 git reset 回退。但 reset 有软硬之分,--hard 会直接丢文件。非程序员不要自己猜,让 AI 解释后再做。
情况三:已经推送到远端。
最安全的是 git revert <hash> 生成一个「反向提交」,把那次提交的效果抵消掉。
情况四:改到一半,想临时收起。
可以用 git stash。它像把桌面上的东西先扫进抽屉,等会儿再拿出来。
.gitignore:什么东西永远不该进仓库
Git 会记住你提交过的一切。密码、token、私钥、真实隐私信息,一旦提交,就会留在历史里。即便把文件删掉,历史记录中仍能找得到原文。
所以,提交前必须有一道过滤网:.gitignore,被写进这个文件的文件夹或文件将不会被 Git 收录。
下面这些通常不该进仓库:
text
.env
*.key
*.pem
node_modules/
dist/
build/
.DS_Store
*.log不要上传仓库,不要放进网盘。
如果已经提交了密钥,正确做法不是「删掉再提交一次」,而是:
- 立刻轮换密钥;
- 让 AI 检查 Git 历史;
- 必要时清理历史。
一条检查提示词:
text
请为这个项目生成合适的 .gitignore,并检查当前是否有敏感文件已经被 Git 追踪。
如果发现 .env、密钥、token、密码等,先停下来告诉我,不要提交。