如何检查 Git 中文件是否被删除

GitGitBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何检查 Git 仓库中的文件是否已被删除。我们将探索不同的方法来识别已删除的文件,包括使用 git log 查看更改历史,以及使用 git status 查看工作目录的当前状态。

通过实际操作步骤,你将创建、提交然后删除一个文件,观察 Git 如何跟踪这些更改。你将特别使用 git log -- <file> 查看删除该文件的提交记录,并使用 git status 在文件提交前查看已删除的文件。最后,你将在现有文件上测试这些方法,以巩固你的理解。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git/BasicOperationsGroup -.-> git/add("Stage Files") git/BasicOperationsGroup -.-> git/status("Check Status") git/BasicOperationsGroup -.-> git/commit("Create Commit") git/BasicOperationsGroup -.-> git/rm("Remove Files") git/BranchManagementGroup -.-> git/log("Show Commits") subgraph Lab Skills git/add -.-> lab-560026{{"如何检查 Git 中文件是否被删除"}} git/status -.-> lab-560026{{"如何检查 Git 中文件是否被删除"}} git/commit -.-> lab-560026{{"如何检查 Git 中文件是否被删除"}} git/rm -.-> lab-560026{{"如何检查 Git 中文件是否被删除"}} git/log -.-> lab-560026{{"如何检查 Git 中文件是否被删除"}} end

运行 git log -- <文件> 检查文件删除情况

在这一步中,我们将探讨如何使用 git log 查看仓库中的更改历史,特别关注它如何显示文件删除操作。

首先,确保你位于项目目录中。打开终端并输入:

cd ~/project/my-time-machine

现在,让我们创建一个稍后会删除的新文件。我们将其命名为 to_be_deleted.txt

echo "This file is temporary." > to_be_deleted.txt

检查文件是否已创建:

cat to_be_deleted.txt

你应该会看到:

This file is temporary.

现在,将这个文件添加到暂存区并提交。这将在 Git 历史记录中记录它的存在。

git add to_be_deleted.txt
git commit -m "Add a file to be deleted"

你应该会看到类似以下的输出,表明已创建一个新的提交:

[master <commit-id>] Add a file to be deleted
 1 file changed, 1 insertion(+)
 create mode 100644 to_be_deleted.txt

现在,使用 rm 命令删除该文件:

rm to_be_deleted.txt

该文件现在已从你的文件系统中消失。但 Git 对此有何了解呢?让我们检查一下状态:

git status

你应该会看到类似以下的内容:

On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        deleted:    to_be_deleted.txt

no changes added to commit but untracked files present (use "git add" to track)

Git 正确识别出文件已被删除。这是因为 Git 会跟踪文件的状态。当一个被跟踪的文件被移除时,Git 会注意到这个更改。

现在,让我们提交这个删除操作。我们再次使用 git add 将删除操作添加到暂存区,然后进行提交。

git add to_be_deleted.txt
git commit -m "Delete the temporary file"

你应该会看到表明删除操作已提交的输出:

[master <commit-id>] Delete the temporary file
 1 file changed, 1 deletion(-)
 delete mode 100644 to_be_deleted.txt

最后,让我们使用 git log 查看历史记录,包括删除操作。

git log

你会看到两条提交记录。最新的一条会有消息“Delete the temporary file”,并显示 to_be_deleted.txt 已被删除。

q 退出日志视图。

这展示了 Git 不仅跟踪文件的创建和修改,还跟踪文件的删除,为你的项目演变提供了完整的历史记录。

使用 git status 处理已删除的文件

在这一步中,我们将进一步探讨 git status 如何帮助我们在提交更改之前管理已删除的文件。

确保你仍处于项目目录中:

cd ~/project/my-time-machine

之前我们删除了 to_be_deleted.txt 并提交了删除操作。现在,让我们创建另一个文件,然后删除它,但 立即提交删除操作。

创建一个名为 another_file.txt 的新文件:

echo "This is another file." > another_file.txt

添加并提交这个新文件:

git add another_file.txt
git commit -m "Add another file"

你应该会看到确认提交的输出:

[master <commit-id>] Add another file
 1 file changed, 1 insertion(+)
 create mode 100644 another_file.txt

现在,使用 rm 命令删除 another_file.txt

rm another_file.txt

该文件现在已从你的文件系统中移除。让我们检查一下仓库的状态:

git status

这次,输出将类似于以下内容:

On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        deleted:    another_file.txt

no changes added to commit but untracked files present (use "git add" to track)

注意,Git 识别出了删除操作,并将 another_file.txt 列在“Changes not staged for commit”下面。这意味着 Git 知道该文件已被删除,但这个更改尚未准备好包含在下一次提交中。

这是一个关键点:从文件系统中删除文件并不会自动将删除操作添加到 Git 的暂存区。你需要明确告知 Git 你希望将此删除操作记录到历史记录中。

git status 命令是你了解仓库当前状态的窗口。它会告诉你哪些文件被修改了、哪些是新的且未被跟踪的,以及哪些文件已被删除。通过定期检查 git status,你可以随时了解项目中的更改情况,并决定哪些更改要包含在下一次提交中。

在下一步中,我们将了解 Git 如何处理未被删除的现有文件。

测试现有文件

在这一步中,我们将了解 Git 如何处理已被跟踪文件的修改。

确保你位于项目目录中:

cd ~/project/my-time-machine

我们有在第一个实验中创建并提交的 message.txt 文件。让我们对这个文件进行修改。可以使用带有 >>echo 命令将文本追加到现有文件中。

echo "Hello again, Future Me!" >> message.txt

>> 操作符会将文本追加到文件末尾,而不是覆盖文件内容(> 会覆盖文件内容)。

让我们查看文件内容以确认更改:

cat message.txt

你应该会看到两行内容:

Hello, Future Me
Hello again, Future Me!

现在,让我们使用 git status 检查仓库的状态:

git status

输出将显示类似以下内容:

On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   message.txt

no changes added to commit but untracked files present (use "git add" to track)

Git 正确识别出 message.txt 已被“modified”(修改)。它之所以知道这一点,是因为它将工作目录中文件的当前版本与上次提交中存储的版本进行了比较。

就像处理已删除的文件一样,Git 会告诉你这些更改“not staged for commit”(未暂存以提交)。这意味着你已经修改了文件,但还没有告诉 Git 你希望将这些特定的修改包含在下一个保存点中。

这是 Git 中的标准工作流程:你对文件进行更改,然后使用 git status 查看所做的更改,接着使用 git add 将你想要提交的更改添加到暂存区,最后使用 git commit 将这些暂存的更改作为项目历史中的新版本保存下来。

理解 git status 的输出是有效使用 Git 的关键。它能清晰地概述项目的状态,并指导你下一步需要采取什么操作来记录更改。

总结

在这个实验中,我们学习了如何在 Git 中检查文件是否已被删除。首先,我们创建并提交了一个文件,使其存在于仓库的历史记录中。然后,我们使用 rm 命令删除了该文件,并观察到 git status 如何准确地将删除操作报告为一项更改。最后,我们提交了删除操作,将此事件记录到 Git 历史中。

通过这些步骤,我们了解到 Git 会跟踪文件的删除操作,并提供了像 git status 这样的工具,让你在提交更改之前识别这些变化。这个过程展示了 Git 如何记录文件的生命周期事件,包括创建和删除。