存档与后悔药:Git
你会让 Agent 给项目存"检查点",并且学会两种后悔药:还没存就改坏了怎么撤、已经存了一个坏版本怎么退回更早的好版本。
回头一题
这道题不考这一节,考前面学过的。想不起来就回去翻一眼再答——记不住的东西,真用的时候一样会卡。
Steve 的站有 12 个页面,每页都各自抄了一份页脚。换个电话号码,麻烦在哪?
程序员敢放开手改代码,靠的就是 Git。命令让 Agent 去敲,你只要弄懂几个关键步骤,出事的时候知道该跟它说哪句话。
下一节 1.9 要把你做好的 Steve's Repair 网站整个迁到新框架,改动很大,迁移过程中很可能会出现错误。动手前先把安全网装好:存一个干净的检查点,真迁坏了能退回来。
每存一次,就留下一张"当时一切正常"的快照。后面手滑改坏了,随时能回到任意一个存档点,之前的进度一点不丢。
第一次需要先开启存档功能:git init
它会先 git init,再存第一个检查点。
如果这台电脑没用过 Git,存第一个检查点时它会让你先设用户名和邮箱,不然不给存。这是正常流程。对你的 Agent 说:"帮我仅在当前仓库配置本地 Git 身份,用户名写你的称呼,邮箱随便填一个。" Agent 会执行 git config --local user.name 与 git config --local user.email,只在这个项目里生效,不动你系统的全局设置。配好就能接着存了。
在哪儿跟 Agent 说?两个地方都行,挑你顺手的:
关键是:你得在项目文件夹里跟它说,它才知道要给哪个项目开启存档。Agent 把网站文件落在哪个文件夹、怎么确认自己在对的位置,见 1.4。
四个动作
Git 命令很多,这门课你认得四个就够,全让 Agent 帮你敲:
git add:把这次的改动挑出来,准备存档。git commit:存一个检查点,写一句说明,比如"做好了首页"。一个检查点会有一个编号(一串字母数字),回退时要用它。git log:翻看存过的所有检查点,从新到旧排着,每个都带编号和那句说明。git restore:把还没存档的改动撤掉,文件恢复成上一个检查点的样子。
说人话就行,比如"帮我存一个检查点,说明写'首页做好了'",或"我改坏了,帮我退回上一个检查点"。认得这四个命令,是为了看懂 Agent 在做什么、它做错了你能看出来、能拦住。
完整演示:你下指令,Agent 执行存档,你在日志中确认结果
下面是一段真实会发生的对话和终端输出(仿终端示意,不是真画面)。你说一句话,Agent 替你敲 git add 和 git commit,最后用 git log 把检查点列出来,你能在里面找到刚存的这一条。
这张图看明白,Git 最要紧的部分你就有了:
- 最上面那行
9f3a1c7 首页做好了就是你刚存的检查点。前面那串9f3a1c7是它的编号,后面是你写的那句说明。 - 越往下越旧。最下面
a17c9f2 初始版本是最早的干净起点。 - 哪行是"上一个好版本"?往下数,找到最近一个你确定当时一切正常的检查点,记住它的编号。回退时就退到它。
真要退的时候,把 git log 的内容复制下来发给 Agent,或者直接说"退到'初始版本'那个检查点",它自己能找到编号。你只需要会看 log、能指出哪行是好版本。
两种后悔药,对应两种改坏
"改坏了"其实分两种,救法不一样。这一节最要紧的就是这段,下一节迁框架会用到第二种。
改了一堆,还没 commit,发现越改越糟
你或 Agent 刚改了文件,还没存检查点,现在想把这些改动全部丢掉,回到上一个检查点那个干净样子。
Agent 敲的是:
文件立刻变回上一个检查点的样子,刚才那些乱改全没了。
已经 commit 了,过后才发现这个版本是坏的
坏改动已经被存成一个检查点了(比如迁框架中途存了一次,后来才发现整个迁移都是错的)。这时 git restore 不够,要退回到更早的某个好检查点。
Agent 会先看 git log 找到那个好检查点,再把项目退回去。你只要在 log 里指对哪行是好版本。
因为迁移过程里会存好几次档,等你发现不对,坏版本早被存进去了。所以下一节动手前,先按上面 git init 那段,存一个干净的"初始版本"检查点。这个干净点就是你 B 路线要退回的目的地。没有它,翻车了就没地方退。
动手练习:把两种情况判断对
不用真敲命令。下面三个小场景,你判断每个该用哪种后悔药。考的是"碰上这情况我该说哪句话"——真用 Git 时,你要做的判断也就这一个。
场景一:你让 Agent 改了导航栏,还没让它存检查点,一看改得乱七八糟,想全部撤掉。该怎么办?
场景二:Agent 迁框架,中途存过两次检查点,现在整站全乱、那两个检查点也都是坏的。你想回到迁移之前那个好版本。这是哪种情况?
场景三:你要回退到某个检查点,但拿不准 git log 里哪一行才是"还正常"的版本。最稳的做法是?
把回退顺序排对
情况 B 退回旧版本,Agent 内部是按固定顺序走的。下面四步打乱了,按正确先后点选。点错会提示,点对会标上序号。
把"退回一个旧检查点"的四步排成正确顺序:
先点你认为的第一步。
自检:对着你真实的项目核对
下面几条,对着你自己电脑上那个项目诚实地勾。这一节不光要看懂,迁框架之前你得真的有一个干净检查点垫底。
还差几项就齐了。
- Agent 说"不是一个 Git 仓库 / not a git repository":这个项目还没
git init,先让它开启 Git 再存档。 git log一片空、说"没有任何提交":你还没存过任何检查点,先让 Agent 存一个,log 里就会出现了。- 退回去之后好像丢了些东西:别慌,先停手别再改,把情况原样告诉 Agent。退错了往往还能找回来,越乱改越难救。
开启存档靠 git init(一次),存检查点靠 git add + git commit,翻账本靠 git log。改坏了分两种:没存过用 git restore 撤回(A),存过坏版本就退回一个旧检查点(B)。四条命令都交给 Agent,你只管会看、会说、指对版本。下一节迁框架,先存干净点,放手让它改。
不知道怎么让 Agent 开启 Git、看不懂 git log 哪行是好版本、或者担心"退回去会丢东西"?把你的 git log 输出和当前情况写清楚,发到群里问问大家,或者直接向 Abel 或助教提问。