Перейти к основному содержимому

Как отменить неустановленные изменения в Git

· 3 мин. чтения

1. Обзор

Рабочий каталог Git может содержать различные типы файлов, включая промежуточные файлы, неподготовленные файлы и неотслеживаемые файлы.

В этом руководстве мы увидим, как отменить изменения в нашем рабочем каталоге, которых нет в файле index.

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")

Здесь мы можем видеть некоторые файлы, которые были изменены и не проиндексированы, а также новый файл, который мы добавили.

Теперь давайте подготовим существующий файл Java с помощью git add и снова проверим состояние:

$ 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

Мы видим, как команда очистки удалила неотслеживаемый файл из нашего рабочего каталога.

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

Мы видим, что наш рабочий каталог теперь содержит только поэтапные изменения.

5. Вывод

В этом руководстве мы увидели, как наш рабочий каталог может содержать промежуточные, неподготовленные и неотслеживаемые файлы среди файлов, которые в настоящее время не находятся под контролем версий Git.

Мы также видели, как git clean -df и git checkout — . может удалить все неустановленные изменения из нашего рабочего каталога.