Git:版本控制入门 · Lesson 3 of 5

第 3 课:历史查看与文件恢复

本课目标:

  • git log 阅读提交历史。
  • 通过哈希识别一次提交。
  • git restore 找回文件的早期版本。

先修条件:第 1-2 课(存档点、git initgit addgit commit) | 上一篇 << 02 | 下一篇 04 >>

如果昨天的版本更好呢?

你做了一次提交,然后又改了文件。现在你发现新版本更差,想要回旧版本。

Git 会永久保存每一次提交。每次提交都有一个唯一的哈希:一长串字母和数字,充当这次提交的 ID。用 git log 可以看到提交列表 1。只要知道目标提交的哈希,你就可以让 Git 把某个文件恢复成那次提交时的样子。

阅读时间线

在你的 git-practice 文件夹里运行 git log,你会看到类似这样的输出:

text
commit a1b2c3d4e5f6...Author: Asha Smith <asha@example.com>Date:   Fri Jul 17 10:00:00 2026
    Add first draft

commit 后面那串长字符就是哈希。你不需要输入完整的一串;只要前几个字符不和别的提交重复,通常就足以指定它。

git log 按时间列出提交,最新的在最上面。最上面那条就是你当前所在的提交。

恢复旧版本

命令 git restore --source=<hash> <file> 会用那次提交里的版本替换当前文件。最常用的 source 是 HEAD,意思是 “当前提交”;或者 HEAD~1,意思是 “当前提交的前一个” 2

运行之后,用文本编辑器打开 draft.txt,它应该显示旧版本的内容。

安全提醒: git restore 会改动工作目录里的文件。如果你有在意的未提交改动,先提交它们,或者在仓库之外留一份副本。

完整示例(跟着做)

留在你的 git-practice 文件夹里。

如果 git log --oneline 只显示一次提交,HEAD~1 还不存在。先按第 2 课做出两次提交,或者现在补一次提交,再来做这一步。

你来试试(填空示例)

补全命令,找回 notes.txt 在两次提交之前的版本。

答案:

常见错误拆解

错误: 运行 git restore --source=HEAD~1 file.txt 之后,以为自己改写了历史。并没有。你只是把一个旧版本复制进了工作目录,原来那次提交仍然在历史里。如果想保留恢复出来的版本,你必须重新暂存并提交它。

小结 + 下节课预告

你现在能阅读仓库的历史,也能找回文件的早期版本。四项核心技能已经掌握两项。接下来,你将学习用分支安全地做实验。

Footnotes

  1. Pro Git, Recording Changes to the Repository — https://git-scm.com/book/en/v2/Git-Basics-Recording-Changes-to-the-Repository

  2. Git User Manual — https://git.github.io/htmldocs/user-manual.html

Exercises

01

在 git-practice 文件夹里再做两次提交,让历史里至少有三次。然后运行 git log --oneline,把三个提交哈希抄进一份笔记。

第 1 级(热身)
Done criteria · checked locally
02

用第一次提交的哈希运行 git restore --source=<hash> draft.txt,找回文件的最初版本。然后打开文件,确认内容和最初一致。

第 2 级(进阶)
Done criteria · checked locally