03 — 基本工作流:把代码真的「记进历史」
03 — 基本工作流把代码真的「记进历史」写在前面这一章要解决什么上一章我们建立了「书桌 / 待交作业篮 / 档案柜」的模型。这一章就把它跑成肌肉记忆新建一个练习仓库真正完成几次提交学会看历史、看差异把日常最小循环练熟学完后你应该能不看资料独立完成「改文件 → 看状态 → 暂存 → 提交 → 看历史」这套动作。读者设定大一同学刚学完第 02 章的三区模型还没做过团队项目。1. 定位为什么要有「工作流」这一章1.1 一句话先记住工作流 你每天都在重复的那几个动作按顺序串起来。就像做饭有固定顺序洗 → 切 → 炒 → 装盘用 Git 也有固定节奏改文件编辑器保存 → 看状态 → 暂存 → 提交 → 看历史记住这个节奏比背一百个参数有用。1.2 不练工作流会怎样现象原因改了一晚上却不知道刚才提交了什么没习惯看历史一周后回来看不懂自己改了啥提交说明乱写或没写想找回「昨天那个能跑的版本」历史太乱找不到一交作业就紧张没把动作练成本能工作流就是让你闭着眼睛也能做对的那套动作。1.3 和你已会的事对比你已经会的工作流对应写日记今天做了什么git commit -m 今天做了什么翻日记本看上周git log对比两版草稿git diff整理书桌再开始git status看清楚再动手1.4 本章内容目标目标你能做到建仓会git init新建练习仓库两步走熟练addcommit看历史会用git log找以前的提交看差异会用git diff看改了什么写说明会写人话提交说明2. 本质工作流背后的三区2.1 总图回顾图上一章的三区模型本章把它跑起来。2.2 用白话再过一遍工作区你编辑器里改的文件。暂存区git add把改动放进「待交作业篮」。仓库git commit把篮子里的内容正式记进历史。本章就是反复走2 → 3这一步。2.3 必须接受的几条规矩规矩白话提交只认篮子没暂存的内容不会被带走提交说明写人话以后靠它回忆一次提交做一类事别把「改错字」和「加新功能」塞一起历史是「快照」不是「改动日志」每次提交存的是当时整份项目长什么样短哈希每次都不同别背哈希看说明2.4 新手最常踩的坑坑表现办法以为提交了就上传了提交只在本地上传是后面远程章节说明写update一周后看不懂写清「改了什么、为什么」一次提交一大堆难回退小步提交忘了add就commit提交空了先statusadd后又改没再add提交的是旧版改完再add一次3. 建议学习顺序建仓 → 第一次提交 → 第二次提交 → 看历史 → 看差异 → 练最小循环4. 动手准备可丢弃目录请用一个可以随便删的目录练手。mkdirlab-workflowcdlab-workflowgitinit-bmaingitconfig user.nameAda Examplegitconfig user.emailadaexample.comgit--versiongit version 2.43.0本系列样例在 Linux 上用Git 2.43.0验证你电脑版本接近即可。5. 跟着做完成两次提交5.1 第一次提交根提交新建一个文件写点内容printfhello git\nREADME.txt先看状态gitstatusOn branch main No commits yet Untracked files: (use git add file... to include in what will be committed) README.txt nothing added to commit but untracked files present (use git add to track)白话翻译还没有任何提交No commits yetREADME.txt是未跟踪新文件篮子是空的所以「没有可提交的内容」放进篮子gitaddREADME.txtgitstatusOn branch main No commits yet Changes to be committed: (use git rm --cached file... to unstage) new file: README.txt正式记进历史gitcommit-mdocs: 添加项目说明[main (root-commit) 637f5ba] docs: 添加项目说明 1 file changed, 1 insertion() create mode 100644 README.txt白话翻译main是当前分支名root-commit表示这是第一条提交没有更早的父提交637f5ba是这次提交的短哈希每次都不同别背改了 1 个文件、加了 1 行5.2 第二次提交改已有文件改一下 READMEprintfhello git v2\nREADME.txt看差异书桌相对篮子多了什么gitdiffdiff --git a/README.txt b/README.txt index 8d0e412..e17332f 100644 --- a/README.txt b/README.txt -1 1 -hello git hello git v2怎么看这份差异---和表示「旧版 / 新版」-hello git是删掉的行hello git v2是加进来的行放进篮子并提交gitaddREADME.txtgitcommit-mdocs: 更新说明为 v2[main 6cc2138] docs: 更新说明为 v2 1 file changed, 1 insertion(), 1 deletion(-)5.3 看历史gitlog--oneline6cc2138 docs: 更新说明为 v2 637f5ba docs: 添加项目说明白话翻译最上面是最新提交越往下越早--oneline让每条提交只占一行方便看图编辑 → 看状态 → 加入暂存 → 提交 → 再查看。本章就是练这条线。5.4 多看一点历史的招式命令用途git log --oneline一行一条最常用git log --oneline -5只看最近 5 条git log --graph --oneline画分支图分支章节用git show看最近一次提交的详情改了哪些行git show 哈希看指定那次提交6. 命令按「用途」分组6.1 建仓命令干什么git init -b main在当前目录建仓初始分支叫maingit clone 网址复制一个已有的远程仓库后面章节6.2 看状态只读放心用命令干什么git status总览三区git status -s短格式git diff看还没进篮子的改动git diff --staged看已在篮子里、准备提交的改动git log --oneline看历史git show看最近一次提交详情6.3 记录命令干什么git add 文件放进篮子git add -p一个文件里只挑几段进篮子进阶git commit -m 说明把篮子内容记成一笔提交6.4 提交说明怎么写推荐前缀 简述前缀用于feat:新功能fix:修 bugdocs:改文档chore:杂活依赖、配置refactor:重构不改功能例子feat: 添加登录页面 fix: 修复购物车金额为空的崩溃 docs: 补充环境变量说明 chore: 升级依赖版本白话原则一句话能说清「这次改了什么、为什么」就行。7. 对照表降低记忆负担7.1 「保存」vs「提交」vs「上传」动作给谁有说明吗上网了吗编辑器保存现在的你没有没有git commit未来的你有没有仍在本机git push以后学同学 / 老师继承提交说明有7.2 历史命令对照想看什么用什么一长串历史git log一行一条git log --oneline只看最近几条git log -5画分支图git log --graph --oneline看一次提交改了啥git show7.3 两种差异命令在比什么git diff书桌 ↔ 篮子git diff --staged篮子 ↔ 最新提交8. 安全习惯8.1 建议这样做习惯原因每次提交前先git status避免交错文件提交说明写人话一周后自己还看得懂一次提交只做一类事以后好回退、好检查在可删除目录练手不怕点错密钥、密码文件不要add进历史很难抹掉经常git log回看保持历史清晰8.2 推荐的最小循环背下来# 1. 在编辑器改文件并保存# 2. 看状态gitstatus# 3. 看差异可选gitdiff# 4. 放进篮子gitadd某个文件# 5. 再确认篮子gitstatus# 6. 正式记录gitcommit-m一句话说明这次改了什么# 7. 看历史确认gitlog--oneline-5把这套动作重复十次就会变成本能。9. 真实场景9.1 写课程大作业每完成一节就提交一次说明写「完成第三节实验步骤」。改乱了至少还能对照某一节完成时的版本。比桌面上堆最终版-真的最终.docx清醒得多。9.2 写小项目加一个功能 → 提交feat: ...修一个错 → 提交fix: ...改 README → 提交docs: ...历史清晰以后回退、对比都方便。9.3 和同学协作之前本机历史清晰每次提交说得清不然文件一合并更难沟通「你改的是哪一版」9.4 误以为「网盘同步」就够网盘适合备份Git 适合看清改了哪几行、写明为什么改。大一先建立 Git 习惯以后做课设、实习会轻松很多。10. 稍微多懂一点点可选每次提交存的是整份项目快照不是只存改动。Git 靠内容相同复用所以不会很浪费空间。短哈希是完整哈希的前几位足够区分别背看说明。git show看一次提交的元数据 改动行。图形界面编辑器侧边栏底层仍是这三区会看status的人用任何界面都更稳。11. 小实验请一定动手实验甲三次提交建仓创建README.md提交docs: 初始化。加一个小脚本比如hello.py提交feat: 加 hello 脚本。修错字提交fix: 修正错字。git log --oneline应该有三行git status应该干净。通过标准不看资料能独立完成。实验乙看差异改已提交文件先不add运行git diff。再git add运行git diff和git diff --staged观察区别。提交后git show看这次提交改了什么。通过标准能解释两种差异为什么不同。实验丙找回以前的版本预览有两次提交后git log --oneline看到两条。git show 早那次哈希看当时改了什么。进阶git checkout 哈希 -- README.txt把某个文件恢复成旧版——下一章系统讲撤销。通过标准知道历史是可以回看的不必害怕改坏。12. 常见问题问 1我可以一天提交一次吗可以但不推荐。一天多次小提交比一次大提交好回退、好检查。问 2提交说明写中文还是英文个人练习中文也行正式项目常写英文。关键是说清「改了什么」。问 3git log输出太多怎么办用git log --oneline或git log -5。问 4提交错了能改吗能。下一章讲撤销git commit --amend改最近一次提交。问 5git add .一直用可以吗练习可以正式作业里更建议先status避免把临时文件加进去。问 6提交了是不是老师就能看见默认不能。提交在你电脑。要让别人看见需要以后学的远程推送。问 7历史能删吗能改写但有风险尤其已共享的历史。进阶章节再讲。问 8我需要每改一行就提交吗不用。一个完整的小改动一个功能 / 一个修复提交一次即可。13. 总结、学习路线与思维升华13.1 这一章请记住的点记住什么工作流节奏改 → 状态 → 暂存 → 提交 → 看历史两步走先add再commit看历史git log --oneline看差异git diff与git diff --staged说明写人话一周后还看得懂下一章预告撤错时怎么安全地退13.2 在整个系列中的位置01 认识 Git、装好工具 02 三区模型 03 基本工作流 ← 当前把动作练熟 04 安全地撤销 05 分支与合并 06 远程协作 ……13.3 思维升华Git 不是自动备份而是「你主动挑选、主动说明」的历史记录工具。把日常循环练成本能比背参数有用一千倍。提交说明写人话是给一周后迷茫的自己留的路标。13.4 参考资料以下资料帮助校对了本章难度与术语图示署名见仓库内说明文件。Pro Git 中文版 — 记录每次更新到仓库Pro Git 中文版 — 查看提交历史git init 说明git add 说明git commit 说明git log 说明git diff 说明本仓库图示署名assets/diagrams/ATTRIBUTION.md命令输出样例验证环境Git 2.43.0演示作者信息为虚构Ada Example adaexample.com。13.5 本章检查清单能不看资料完成建仓 → 两次提交 → 看历史会读git status四个关键信息知道git diff和git diff --staged的差别提交说明会写人话知道提交只在本地不等于上传把最小循环练过至少十次把日常循环练成本能你就真正「会用 Git」了。下一章我们讲改错了怎么安全地退回去。