Contents

丢弃不在索引中的更改

1. 概述

Git 工作目录可以包含不同类型的文件,包括暂存文件、未暂存文件和未跟踪文件。

在本教程中,我们将看到如何丢弃工作目录中不在索引中的更改。

2. 分析工作目录的状态

让我们检查一下工作目录的状态:

$ 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. 删除未暂存为提交的更改

现在我们已经删除了未跟踪的文件,我们要处理工作目录中的暂存文件和未暂存文件。我们可以使用带有“–”选项的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

我们可以看到我们的工作目录现在只包含分阶段的更改。