行者孙Python

单机篇-Day9|时间机器:git checkout/restore 恢复误删文件,找回丢失代码

📖 知识点

1. 前提:文件要 "提交过" 才能找回

Git 能恢复的是之前提交(commit)过的版本。只要这个文件在某次提交里存在过,误删了就能找回来。

💡 生活比喻:git 像 "回收站 + 时光机"—— 但不是所有文件都救得回,得是你之前存过档的才算数。没提交过的文件,Git 也无能为力(就像没写过日记的日子,想不起细节)。

2. 误删未提交的文件:git restore

如果文件被删,但改动还没提交,可以用 git restore 从暂存区 / 版本库恢复:

git restore 文件名

 

把文件恢复到最近一次提交(或暂存)的状态。

3. 找回已提交但被删的文件:git checkout

如果文件是之前提交过的版本,误删后用 git checkout 从版本库恢复:

git checkout -- 文件名

 

git checkout -- 下单模块.py

 

-- 后面的文件名,从版本库恢复这个文件到最近提交的样子。

4. 找回整个 "丢失的提交":git reflog(进阶救星)

如果连提交记录都混乱了,用 git reflog 查看操作历史,找回被 reset 弄丢的提交:

git reflog

 

这个可以查到所有操作记录和曾经的版本 ID,用于 "复活" 被 reset 掉的提交(进阶用法,先认识)。

⚠️ 易错提醒

  1. 恢复的前提是文件之前提交过,没提交过救不回

  2. git restore 文件名 恢复未提交的删除;git checkout -- 文件名 从版本库恢复

  3. 恢复的是 "最近一次提交" 的版本,之后的改动会丢

⚔️ 剧情 Kata 实战任务

任务需求:

  1. 先确保 "下单模块.py" 之前提交过(git add + commit)

  2. 模拟误删:用 rm 删掉 "下单模块.py"

  3. 用 git checkout -- 下单模块.py 从版本库找回

  4. 验证文件回来了,内容完好

  5. 体会 "Git 时间机器" 的威力

参考代码(在终端依次敲)

# 0. 进仓库
cd ~/外卖App

# 1. 确保"下单模块.py"提交过(先建文件并提交)
echo "def 下单(): return '下单成功'" > 下单模块.py
git add 下单模块.py
git commit -m "feat: 新增下单模块"

# 2. 模拟误删(小张手滑)
rm 下单模块.py

# 3. 确认删了
ls

# 4. 用时间机器找回
git checkout -- 下单模块.py

# 5. 验证找回来了
ls
cat 下单模块.py

 

运行示例:

user@linux:~/外卖App$ git commit -m "feat: 新增下单模块"
[master e1f2a3b] feat: 新增下单模块

user@linux:~/外卖App$ rm 下单模块.py
user@linux:~/外卖App$ ls
外卖App.py  .gitignore    # 下单模块.py 不见了!

user@linux:~/外卖App$ git checkout -- 下单模块.py
user@linux:~/外卖App$ ls
外卖App.py  .gitignore  下单模块.py   # 回来了!

user@linux:~/外卖App$ cat 下单模块.py
def 下单(): return '下单成功'

 

💡 完成动作示意:

  1. 下单模块.py 提交过,有存档

  2. rm 下单模块.py 误删 → ls 里不见了

  3. git checkout -- 下单模块.py 从版本库恢复

  4. ls 里文件回来了,cat 内容完好 —— 时间机器把小张的心血救回来了!

🧠 思考题

  1. Git 能恢复被删文件的前提是什么?为什么 "没提交过" 的文件救不回?

  2. git checkout -- 文件名 和 git restore 文件名 都能恢复,分别适用于什么情况?(提示:一个从版本库恢复,一个恢复未提交的删除)

‹ 返回目录
🏠首页 Python 📦资源 👤关于我