1. 概述
在 Git(Git指南)的工作目录中,可以包含不同类型的文件,如暂存区文件、未暂存文件和未跟踪文件。
在这个教程中,我们将学习如何丢弃工作目录中未暂存的变化。
2. 工作目录状态分析
以我们从 Git仓库 起始并克隆了一个项目为例,然后对工作目录进行了修改。
让我们检查一下工作目录的状态:
$ git status
On branch master
Your branch is up to date with 'origin/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: README.md
modified: gradle/maven-to-gradle/src/main/java/com/sample/javacode/DisplayTime.java
Untracked files:
(use "git add <file>..." to include in what will be committed)
gradle/maven-to-gradle/src/main/java/com/sample/javacode/TimeZones.java
no changes added to commit (use "git add" and/or "git commit -a")
在这里,我们可以看到一些已修改但未暂存的文件,以及一个新添加的文件。
现在,使用 git add
暂存现有的 Java 文件,再次查看状态:
$ git add gradle/maven-to-gradle/src/main/java/com/sample/javacode/DisplayTime.java
$ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: gradle/maven-to-gradle/src/main/java/com/sample/javacode/DisplayTime.java
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: README.md
Untracked files:
(use "git add <file>..." to include in what will be committed)
gradle/maven-to-gradle/src/main/java/com/sample/javacode/TimeZones.java
这里,我们可以看到工作目录中有三类文件:
- 已暂存文件 - DisplayTime.java
- 未暂存文件 - README.md
- 未跟踪文件 - TimeZones.java
3. 删除未跟踪文件
未跟踪文件是指新添加到仓库但尚未添加到版本控制的文件。我们可以使用 clean
命令删除这些文件:
$ git clean -df
-df
选项确保强制删除,并包括未跟踪的目录。运行此命令将输出被删除的文件:
Removing gradle/maven-to-gradle/src/main/java/com/sample/javacode/TimeZones.java
现在,再次检查状态:
$ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: gradle/maven-to-gradle/src/main/java/com/sample/javacode/DisplayTime.java
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: README.md
可以看到 clean
命令已从工作目录中移除了未跟踪文件。
4. 删除未暂存到提交的变化
现在,我们已经删除了未跟踪文件,剩下的是工作目录中的暂存和未暂存文件。我们可以使用 git checkout --
命令移除所有未暂存到提交的变化:
$ git checkout -- .
执行命令后再次检查状态:
$ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: gradle/maven-to-gradle/src/main/java/com/sample/javacode/DisplayTime.java
我们可以看到工作目录现在只包含暂存的变化。
5. 总结
在这篇教程中,我们了解了工作目录中可能包含暂存、未暂存和未跟踪的文件,这些文件尚未纳入 Git 版本控制。
我们还看到了如何使用 git clean -df
和 git checkout --
来从工作目录中移除所有未暂存的变化。