Git

【Git】Git 文件删除、恢复及高频面试考点整理

小破孩
2022-06-21 / 0 评论 / 328 阅读 / 正在检测是否收录...

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 历史,导致协作冲突)。

五、面试高频考点提炼(必背)

  1. Q:git rm <文件>rm <文件> 的核心区别是什么?
    A:git rm 会同时删除工作区+暂存区文件,并记录删除动作,需 commit 同步到仓库;rm 仅删除本地物理文件,不记录 Git 操作,仓库仍保留该文件。
  2. Q:如何仅从 Git 跟踪中移除文件,本地工作区保留该文件?
    A:使用 git rm --cached <文件>,后续需在 .gitignore 中添加该文件,避免再次被跟踪。
  3. Q:工作区不小心误删了已跟踪的文件,如何恢复?
    A:用 git checkout -- <文件> 或 Git 2.23+ 的 git restore <文件>,用暂存区/仓库的最新版本覆盖工作区。
  4. Q:git commit --amend 的作用和使用限制是什么?
    A:作用是重写最近一次的 commit message 或补充文件到最近一次提交;限制是仅能用于本地未推送的提交,已推送的提交不可用(会修改历史)。
  5. Q:git add 能记录文件删除的动作吗?
    A:不能。git add 仅记录文件新增和修改,文件删除需通过 git rm 记录。
0

评论 (0)

取消