如何检查 Git 仓库是否干净

GitGitBeginner
立即练习

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

简介

在这个实验中,你将学习如何使用 git status --porcelain 命令高效地检查 Git 仓库是否干净。该命令提供了机器可读的输出,非常适合用于脚本编写和快速状态检查。

你将探究标准的 git status 命令和 --porcelain 版本之间的差异,观察当仓库干净时与包含未跟踪或已修改文件时输出的变化。通过这个实践经验,你将了解如何以编程方式验证是否存在待处理的更改。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git/BasicOperationsGroup -.-> git/add("Stage Files") git/BasicOperationsGroup -.-> git/status("Check Status") subgraph Lab Skills git/add -.-> lab-560095{{"如何检查 Git 仓库是否干净"}} git/status -.-> lab-560095{{"如何检查 Git 仓库是否干净"}} end

使用 git status --porcelain 进行干净状态检查

在这一步中,你将了解 git status 命令的一个实用变体:git status --porcelain。该命令提供简洁、机器可读的输出,非常适合用于脚本编写或快速检查状态,无需处理多余的文本信息。

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

cd ~/project/my-time-machine

现在,再次运行标准的 git status 命令,查看仓库的当前状态。由于你在上一步刚进行了一次提交,仓库应该是干净的:

git status

你应该会看到类似以下的输出,表明你的工作目录是干净的:

On branch master
nothing to commit, working tree clean

现在,尝试使用 --porcelain 版本的命令:

git status --porcelain

如果你的仓库是干净的,这个命令应该不会产生任何输出。这是关键区别所在——它仅会显示未跟踪、已修改或已暂存的文件信息。这使得它在快速检查是否存在待处理更改时非常有用。

为什么这很有用呢?假设你正在编写一个脚本,需要在执行某个操作之前检查是否存在未提交的更改。解析常规的 git status 输出可能会比较棘手,因为它是为人类阅读而设计的。而 --porcelain 输出是为脚本设计的,便于以编程方式检查更改。

在下一步中,你将了解当存在未跟踪或已修改的文件时,输出会如何变化。

验证没有未跟踪或已修改的文件

在这一步中,你将明确验证当仓库干净时,git status --porcelain 命令不会产生任何输出。这将强化该命令仅用于显示更改的概念。

首先,确保你位于正确的目录中:

cd ~/project/my-time-machine

现在,再次运行 git status --porcelain 命令。由于自上次提交以来你没有进行任何更改,因此应该不会有输出。

git status --porcelain

如果在运行此命令后,你的终端没有显示任何输出,这意味着你的工作目录是干净的,没有未跟踪或已修改的文件。这是在使用 --porcelain 标志时,干净仓库的预期行为。

没有输出是一个明确的信号,表明 Git 没有发现任何需要跟踪或提交的新内容或更改。在进行新的更改或执行其他 Git 操作之前,这是一种快速有效的方法来确认你是从一个干净的状态开始的。

在下一步中,你将引入一些更改,以观察 --porcelain 输出会如何变化。

针对不同仓库状态进行测试

在这一步中,你将在仓库中进行一些更改,以观察 git status --porcelain 如何报告这些更改。这将帮助你理解 --porcelain 输出中使用的不同代码。

首先,确保你位于正确的目录中:

cd ~/project/my-time-machine

现在,创建一个新的未跟踪文件。将其命名为 notes.txt

echo "Some random notes" > notes.txt

再次运行 git status --porcelain

git status --porcelain

你现在应该会看到类似以下的输出:

?? notes.txt

?? 表示 notes.txt 是一个未跟踪的文件。Git 检测到了该文件,但目前并未对其版本进行管理。

接下来,修改之前提交过的 message.txt 文件。在其中添加另一行内容:

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

>> 操作符用于将文本追加到现有文件中,而不是覆盖它。

现在,再次运行 git status --porcelain

git status --porcelain

你应该会看到类似以下的输出:

 M message.txt
?? notes.txt

M 表示 message.txt 已被修改M 前面的空格表示更改位于工作目录中,但尚未暂存。notes.txt 仍然显示为 ??,因为它仍然是未跟踪的文件。

最后,使用 git add 命令将修改后的 message.txt 文件暂存:

git add message.txt

最后再运行一次 git status --porcelain

git status --porcelain

现在输出应该如下所示:

M  message.txt
?? notes.txt

M 现在位于第一列,表示 message.txt 已被暂存以进行提交。第二列的空格表示自暂存以来,工作目录中没有进一步的修改。notes.txt 仍然是未跟踪的文件。

理解这些代码(?? 表示未跟踪,第二列的 M 表示已修改但未暂存,第一列的 M 表示已暂存的修改)是快速解读 git status --porcelain 输出的关键。

总结

在本次实验中,你学习了如何使用 git status --porcelain 命令检查 Git 仓库是否干净。你发现该命令会提供机器可读的输出,当工作目录干净时,输出为空。这与标准的 git status 输出不同,即使仓库干净,标准输出也会提供人类可读的信息。

你练习了在干净的仓库上运行 git status --porcelain,并观察到它没有产生任何输出,这证实了该命令在脚本编写和快速检查待处理更改方面的实用性。