Git Clean: 删除未跟踪的文件,保持仓库整洁

在处理Git存储库时,通常会积累一些未跟踪的文件和目录,这些文件不是存储库版本控制系统的一部分。这些文件可能包括临时文件、构建产物或其他本地创建的未提交文件。随着时间的推移,这些文件会使工作目录混乱,使得保持一个干净有序的工作空间更加困难。

为解决这个问题,Git提供了git clean命令,用于删除未跟踪的文件和目录。在本指南中,我将向您展示如何安全地使用git clean,它的不同选项,以及避免意外文件删除的最佳实践,同时保持Git存储库整洁。为了进一步学习,我建议参加我们的Git基础GitHub概念介绍课程,了解版本控制以及Git与GitHub之间的区别。

理解git clean

git clean 命令是 Git 中一个有用的工具,用于从工作目录中删除未跟踪的文件。 当您需要将工作目录重置为原始状态时,例如在切换分支之前或运行生成临时文件的构建过程后,git clean 命令非常有用。 然而,git clean 命令应谨慎使用,因为它会永久删除未跟踪的文件和目录,而不会将它们移动到回收站或回收站。

与修改已跟踪文件的git resetgit checkout不同,git clean 严格处理未受版本控制的文件和目录。 这包括:

  • 构建过程创建的临时文件

  • 日志文件或缓存数据

  • .gitignore中列出的文件(如果使用-x显式指定)

git clean命令对于保持整洁的工作目录非常有用,可以与其他Git命令(如git resetgit checkout)相辅相成,管理已跟踪文件中的更改。

我觉得《Git 命令速查表》是一个方便查阅常用Git命令的参考指南。

git clean 的常见用途

git clean命令是一个维护干净工作目录的有用工具。以下是一些常见用例,其中git clean可以安全地删除不必要的文件和目录。

删除未跟踪的文件

在Git存储库中工作时,未跟踪的文件会随着时间累积。以下选项有助于删除它们:

  • git clean -f:强制删除未跟踪的文件。

  • git clean -fd:删除未跟踪的文件和未跟踪的目录。

  • git clean -fx:删除未跟踪和在.gitignore中列出的被忽略的文件。

然而,使用-fx选项时应当小心,因为它也会移除被忽略的文件。在执行该命令之前,始终要使用干跑(git clean -n)进行验证。

交互模式

git clean -i命令启用了交互模式,允许用户有选择性地移除未跟踪的文件。当您希望对删除的文件或目录有更多控制时,这种模式非常有用。

假设您正在一个项目中工作,在这个项目中您已经保存了Olympics文件夹中的更改。然而,您添加了名为2024_Data2025_Data的新数据源。如果您运行git clean -i命令,将会收到提示,允许您从以下选项中选择要删除未跟踪更改的文件。

  • clean:删除选定的文件

  • filter:指定要清理的文件模式

  • select:按编号选择单个文件

  • quit:退出而不删除任何内容

git clean -i 交互模式。图片由作者提供。

安全起见的干跑

使用 git clean -n 选项是一个有用的安全措施,因为它执行”干跑”,显示一个即将被删除的未跟踪文件和目录的列表,而实际上并不删除它们。这使您可以在执行之前审核更改。

在下面的示例中,git clean -n 命令列出应该被删除的文件,但不会删除它们。

git clean -n 用于干跑。图片由作者提供。

结合 git reset

要完全重置 Git 工作目录,您可以结合使用 git reset 和 git clean,其中:

  • git reset --hard:将被跟踪的文件重置为最后提交的状态,丢弃任何本地更改。

  • git clean -fd:删除未跟踪的文件和目录,仅保留已提交的文件。

这种组合可以确保完全清理的工作目录,在切换分支、撤消实验性更改或准备全新开始时非常有用。

查看或者参考Git Pull Force:如何使用远程覆盖本地分支教程,了解覆盖本地更改的最佳实践。

使用git clean的逐步指南

按照以下步骤安全地清理您的Git仓库,删除不需要的未跟踪的文件和目录。

步骤1:检查当前状态

在清理之前,运行git status来检查存储库的当前状态,查看哪些文件是未跟踪的。

git status

运行git status来检查存储库的当前状态。图片由作者提供。

步骤2:预览将要删除的内容

在执行任何删除命令之前,使用git clean -n预览将要删除的内容。

git clean -n

运行git clean -n来预览将要删除的内容。图片由作者提供。

步骤3:删除未跟踪的文件

如果预览看起来正确,运行git clean -f来删除未跟踪的文件。

git clean -f

使用git clean -f来删除未跟踪的更改。图片由作者提供。

步骤4:删除未跟踪的目录

使用git clean -fd来删除未跟踪的目录。

git clean -fd

使用 git clean -fd 命令删除未跟踪的目录。作者提供的图片。

步骤 5:删除被忽略的文件

要同时移除未跟踪和被忽略的文件,请使用 git clean -fx 命令。

git clean -fx

步骤 6:使用交互模式进行选择性清理

为了更精确地控制,考虑使用 git clean -i 进行交互式的清理。这种模式允许你逐个选择要删除的文件。

Git clean -i

git clean -i 交互模式进行选择性清理。作者提供的图片。

git clean 与其他 Git 命令的比较

经常将 git clean 命令与其他修改或重置文件的 Git 命令进行比较。下表突出了它们之间的关键区别:

Command Function
git clean 永久删除未跟踪的文件和目录。
git reset 将跟踪的文件重置为先前的状态,影响暂存和已提交的更改。
git checkout(或 git restore 放弃跟踪文件中的更改,但不会将其删除。
git stash 暂时保存已跟踪和未跟踪的更改以供以后使用。

Git Clean 最佳实践

要安全有效地使用git clean,请遵循以下最佳实践:

  • 在删除之前使用干跑 (-n): 始终使用git clean -n选项在执行git clean之前进行干跑。这样可以预览将被删除的文件,而不实际删除它们。

  • 注意忽略的文件:在使用git clean时,要注意-x选项,该选项会删除被忽略的文件。这可能会删除.gitignore中列出的重要配置文件。如果需要删除被忽略的文件,请使用git clean -fx命令。

  • 结合Git Reset进行完全清理:要完全重置您的存储库,请结合git resetgit clean,其中git reset --hard将已跟踪的文件恢复到其最后提交的状态,git clean -fd会移除未跟踪的文件和目录。

  • 使用交互式模式(-i)进行更安全的删除操作:不要盲目删除文件,而是使用交互式模式(git clean -i)来查看并选择要删除的文件。

潜在风险和预防措施

如果不小心操作,使用git clean可能存在风险,因为它会永久删除文件而不会将它们存储在其他地方。以下是一些关键风险和预防措施:

  • 文件被永久删除:与git stash不同,git clean会永久删除未跟踪的文件和目录。一旦删除,这些文件将无法通过Git恢复。如果以后可能需要这些文件,请在运行git clean命令之前考虑将它们存储或备份。

  • 使用-x选项时要谨慎:使用git clean -fx会删除被忽略的文件,这些文件可能包括在.gitignore中列出的重要配置文件,或者类似node_modules/venv/这样的依赖缓存。意外删除这些文件可能会破坏构建或开发环境,因此只在必要时才使用此选项。

  • 首先进行干预运行:在执行git clean -f之前,始终使用git clean -n进行干预运行。这一步骤可以让您预览将被删除的文件,帮助您避免意外删除重要文件

  • 替代方法:在某些情况下,使用git stash可能比git clean更好。git stash -u命令可以暂存未跟踪的文件,排除被忽略的文件,以便日后恢复,git stash pop可以在需要时恢复暂存的更改。当您需要切换分支或清理工作区而不永久丢失更改时,这种方法非常有用。

结论

一个维护良好的代码库显示出对细节、效率和负责任地管理数字资产的关注。雇主们寻找了解诸如在删除文件之前使用git clean -n、谨慎处理被忽略文件使用-x,以及利用更安全替代方案如git stash等最佳实践的开发人员。

学习DataCamp课程不仅是学习的好方法,也是向雇主们展示您认真对待软件开发的好方法。为此,我建议阅读我们的适用于所有级别的前20个Git面试问题和答案博客文章,并参加我们的新Git基础技能培训,成为Git方面的专家。

Source:
https://www.datacamp.com/tutorial/git-clean