跳到内容

元数据卡: 前置知识:第2章(终端基本命令) | 预计时间:10 分钟 | 完成标志:能用 Git 创建第一个存档

你的进度

终端已经能磕磕绊绊地敲几句了,但你很快发现一个大问题——代码改坏了就找不回来了。

你改了一堆代码,改到一半觉得方向不对,想回退到一小时前的状态——可是已经来不及了。文件已经被覆盖了好几次,之前的版本消失得像从来没存在过。

这个问题的名字,叫"没有后悔药"。


第一场战斗:改错了,想回去

你对着工坊的图纸修修改改了一整个下午。现在你盯着案台上的设计图,心里有点发毛——因为刚才手滑,墨水瓶打翻了,把整张关键的图纸洇成了一片。

你拿布想擦一下,结果越擦越糟——墨迹糊开了,线条全花了。图纸已经毁了。

"要是能回到一盏茶之前就好了。"

这时候你发现终端里有个没见过的命令:

bash
# 先看看工坊里有没有时光机
cd ~/project/my-first-project
git status

语言: Bash 如何运行: 在终端项目目录中执行 预期输出: fatal: not a git repository (or any of the parent directories)

果然,没有。你得先装一台。


第一次初始化

bash
# 在你的项目里装一台时光机
git init

语言: Bash 如何运行: 在终端中执行,确保当前是项目目录 预期输出: Initialized empty Git repository in /home/你/project/my-first-project/.git/

看到 Initialized 了吗?Git 在你的项目根目录里创建了一个隐藏文件夹 .git。现在这台时光机已经装上了,只不过里面还没有任何存档。


第一次存档

你改好了 main.py,觉得这版本值得保存:

bash
# 看看哪些文件变了
git status

语言: Bash 如何运行: 在项目目录中执行 预期输出:

On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
    main.py
    README.md

Git 说:你有文件还没被跟踪。在你的项目里,这些文件就像是散落在工坊地上的材料——Git 知道它们存在,但还没拿起来放进仓库。

你需要把它们先捡起来,放到一个"准备台"上:

bash
# 把文件放到暂存区(准备台)
git add main.py README.md

# 或者用捷径:把所有变化都加进去
git add .

语言: Bash 如何运行: 执行后,再跑一次 git status预期输出:

On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
    new file: main.py
    new file: README.md

现在它们被放在"暂存区"——这个位置就是你确认"我确实想存档这些文件"的地方。你还可以反悔,从暂存区拿掉某个文件:git rm --cached main.py

确定没问题了,你就按下"保存"按钮:

bash
# 创建一个存档点(commit)
git commit -m "我的第一个项目:初始化 main.py 和 README"

语言: Bash 预期输出:

[master (root-commit) a1b2c3d] 我的第一个项目:初始化 main.py 和 README
 2 files changed 15 insertions(+)
 create mode 100644 main.py
 create mode 100644 README.md

恭喜——你创建了第一个 commit。那串 a1b2c3d 是这次存档的唯一编号(哈希值)。从现在开始,你随时可以回到这一刻。


查看存档历史

bash
# 看看你的存档历史
git log

语言: Bash 如何运行: 在项目目录中执行 预期输出:

commit a1b2c3d4e5f6... (HEAD -> master)
Author: 你 <你@example.com>
Date:   Mon Jun 23 16:00:00 2026 +0800

    我的第一个项目:初始化 main.py 和 README

git log 显示了你所有的存档记录。每一条记录都有:唯一编号、作者、时间、提交信息。


回到过去

你继续改 main.py,改了一堆,发现方向错了。这是 Git 最值钱的功能——时光倒流:

bash
# 放弃所有未提交的修改,回到最近一次 commit
git restore .

语言: Bash 如何运行: 确认你想丢弃所有改动后执行 预期输出: 无输出,文件恢复

注意: git restore .永久放弃所有未提交的修改,无法撤销。除非你很确定不再需要这些改动,否则先用 git stash 暂存它们。想恢复某个文件而不是全部?用 git restore main.py

你的工作区里所有未提交的修改都撤销了,文件恢复成最近一次 commit 的状态。

旧版 Git 用 git checkout -- . 做同样的事。新版推荐用 git restore,语义更清晰——它只做"恢复"一件事,不像 checkout 又管分支又管文件。


试试看

打开终端,新建一个临时目录,按顺序执行:

bash
mkdir git-practice && cd git-practice
git init
echo "hello" > test.txt
git status
git add test.txt
git commit -m "first commit"
git log --oneline
echo "world" >> test.txt
git restore test.txt
cat test.txt   # 确认回到 "hello"

试试看:-m 引号里的内容改成你自己的话。试试看:git log 后面加 --oneline 看看输出变化。


下一步

你已经学会了 Git 最核心的操作:存档和回溯。但"暂存区"到底是个什么样的存在?工作区和仓库之间为什么需要多一道步骤?

下一节,我们深入 Git 的三棵树模型——理解这三个区域之间的流转,你就掌握了 Git 的底层逻辑。

继续:三棵树模型与 commit 进阶

Built with VitePress | Software Systems Atlas