第 4 章:时光穿梭——查看历史与回滚
约 817 字大约 3 分钟
2025-12-25
本章目标
学会查看 Git 的“日记本”,并在犯错时使用“时光机”回到过去。
一、 📜 查看历史(git log)
你已经提交了几次代码,现在想看看以前都干了啥。
git log你会看到类似这样的输出:
commit ca82a6dff817ec66f44342007202690a93763949 (HEAD -> main)
Author: Your Name <your_email@example.com>
Date: Wed Dec 25 10:00:00 2025 +0800
第一次提交:创建了 README 文件- commit ID:那一长串字符(
ca82a6...)是这次提交的唯一身份证号(哈希值)。 - Author:是谁干的。
- Date:什么时候干的。
- Message:干了什么。
术语揭秘:HEAD 是什么鬼?
在 Git 的输出中,你经常会看到 HEAD 这个词。 HEAD 其实就是一个指针,它专门指向当前你正在工作的那个版本。
这个名字来源于早期的磁带机。磁带机的读取头(Read/Write Head)读到哪里,数据就从哪里开始。 在 Git 里,当你 git checkout 到某个历史版本时,Git 只是把 HEAD 这个“读取头”移动到了那个版本上,你的文件夹瞬间就变成了那个版本的样子。
小技巧
如果觉得输出太长,可以加个参数: git log --oneline (一行显示一条,简洁明了)
二、 🔙 时光倒流(git reset)
警告:这是 Git 中比较危险的操作,请在清醒状态下使用!
假设你刚提交了一个版本,结果发现代码写得一团糟,想彻底回到上一个版本,就像没发生过一样。
2.1 软重置 vs 硬重置
Git 的重置(Reset)有几种模式,最常用的是 --hard(硬重置)。
git reset --hard <Commit ID>
这句话的意思是:“把一切都恢复到那个 Commit ID 的状态,抛弃之后的所有修改。”
2.2 实战演练
- 修改
README.md,增加一行 "这是一行错误的代码"。 - 执行
git add .和git commit -m "添加了错误代码"。 - 执行
git log --oneline,找到上一次提交的 ID(比如是a1b2c3d)。 - 执行穿越命令:
git reset --hard a1b2c3d- 打开
README.md看看,那行错误的代码是不是消失了?🎉
慎用 --hard
--hard 会直接删除工作区中未提交的修改以及回退版本之后的提交。除非你非常确定不需要这些东西了,否则请三思。
三、 🕵️ 只是看看(git checkout)
如果你不想回退,只是想看看以前的版本长什么样(比如想找回一段以前删掉的代码),可以用 checkout。
git checkout <Commit ID>这时候你会进入一个叫 "Detached HEAD"(头指针分离) 的状态。别慌,这只是说明你现在处于一个“游离”的历史节点,不在任何分支上。
你可以随意查看文件。看完后,想回到最新的状态,只需要:
git checkout main
# 或者 master,取决于你的主分支叫什么四、 总结
git log:查看历史记录(日记本)。git reset --hard <ID>:彻底回退到某个版本(读档,且覆盖当前进度)。git checkout <ID>:临时查看某个版本(查看旧存档,不覆盖当前进度)。