Git 文件删除、恢复及高频面试考点整理
本文聚焦 Git 中文件删除、恢复的核心命令,明确不同场景下的用法差异,并提炼面试高频考点,便于理解和记忆。
一、Git 删除文件:3种核心场景
1. 彻底删除(工作区+暂存区+仓库)
适用场景:需要从 Git 版本控制中永久移除文件(本地和仓库都不再保留)。
步骤:
# 1. 从工作区(本地物理文件)和暂存区同时删除文件
git rm <文件名> # 例:git rm test.log
# 2. 提交删除操作到仓库,完成版本记录更新
git commit -m "删除无用文件 test.log"关键:git rm 会同时记录“删除动作”,提交后仓库中该文件的历史记录仍存在,但最新版本中已移除。
2. 仅从暂存区删除(本地保留文件)
适用场景:不小心将不需要跟踪的文件(如日志、缓存、IDE 配置)添加到暂存区(git add 后),想取消跟踪但本地保留文件。
命令:
git rm --cached <文件名> # 例:git rm --cached .idea/关键:
- 本地工作区的文件不会被删除,仅从 Git 暂存区和跟踪列表中移除;
- 后续需在
.gitignore中添加该文件/目录,避免再次被git add跟踪。
3. 本地物理删除(不影响 Git 跟踪)
命令:直接用系统命令删除本地文件(如 Linux rm <文件>、Windows del <文件>)。
区别:
- 仅删除本地物理文件,未将“删除动作”告知 Git(暂存区和仓库仍记录该文件);
- 需后续执行
git rm <文件>+git commit,才能将删除动作同步到仓库。
二、误删文件恢复:工作区文件误删补救
适用场景
本地工作区不小心删除了已被 Git 跟踪的文件(即该文件之前已提交到仓库/暂存区),想恢复文件。
命令(2种方式)
# 方式1:Git 老版本兼容(经典写法)
git checkout -- <文件名> # 例:git checkout -- app/Controller/Test.php
# 方式2:Git 2.23+ 推荐(语义更清晰)
git restore <文件名>关键注意事项:
- 仅能恢复“已被 Git 跟踪”的文件(未
git add过的未跟踪文件,误删后无法通过 Git 恢复); - 命令会用暂存区/仓库中的最新版本覆盖工作区,未提交的改动会丢失。
三、核心命令对比(面试高频)
1. git rm vs rm(删除文件)
| 命令 | 作用范围 | 是否记录 Git 操作 | 适用场景 |
|---|---|---|---|
git rm | 工作区 + 暂存区(可选 --cached 仅暂存区) | 是(记录删除动作) | 需同步删除动作到仓库 |
rm(系统) | 仅本地工作区(物理文件) | 否(无 Git 记录) | 仅临时删除本地文件,不影响 Git |
2. git add vs git rm(记录操作)
| 命令 | 能记录的动作 | 不能记录的动作 |
|---|---|---|
git add | 文件新增、文件修改 | 文件删除(需 git rm) |
git rm | 文件删除 | 文件新增、修改(需 git add) |
四、补充实用命令:git commit --amend(重写最近提交)
作用
修改最近一次的 commit message(提交说明),或补充少量未提交的文件到最近一次提交(避免多一条冗余提交)。
用法
# 1. 仅修改最近一次的 commit message
git commit --amend # 执行后进入编辑器,修改后保存退出
# 2. 补充文件到最近一次提交(先 add 未提交的文件)
git add 遗漏的文件.txt
git commit --amend # 保持原 message 或修改后提交面试注意事项:
- 仅适用于本地未推送(push) 的提交(已推送到远程仓库的提交,禁止使用
--amend,会修改 Git 历史,导致协作冲突)。
五、面试高频考点提炼(必背)
- Q:
git rm <文件>和rm <文件>的核心区别是什么?
A:git rm会同时删除工作区+暂存区文件,并记录删除动作,需commit同步到仓库;rm仅删除本地物理文件,不记录 Git 操作,仓库仍保留该文件。 - Q:如何仅从 Git 跟踪中移除文件,本地工作区保留该文件?
A:使用git rm --cached <文件>,后续需在.gitignore中添加该文件,避免再次被跟踪。 - Q:工作区不小心误删了已跟踪的文件,如何恢复?
A:用git checkout -- <文件>或 Git 2.23+ 的git restore <文件>,用暂存区/仓库的最新版本覆盖工作区。 - Q:
git commit --amend的作用和使用限制是什么?
A:作用是重写最近一次的 commit message 或补充文件到最近一次提交;限制是仅能用于本地未推送的提交,已推送的提交不可用(会修改历史)。 - Q:
git add能记录文件删除的动作吗?
A:不能。git add仅记录文件新增和修改,文件删除需通过git rm记录。
评论 (0)