Как вернуть все локальные изменения в проекте, управляемом Git, в предыдущее состояние? - PullRequest
1745 голосов
/ 18 июля 2009

У меня есть проект, в котором я запустил git init. После нескольких коммитов я сделал git status, который сказал мне, что все было в курсе и не было никаких локальных изменений

Затем я сделал несколько последовательных изменений и понял, что хочу все выбросить и вернуться в исходное состояние. Эта команда сделает это для меня?

git reset --hard HEAD

Ответы [ 12 ]

6 голосов
/ 03 января 2017

Попробуйте это для отмены всех изменений, не переданных в локальной ветке

$ git reset --hard HEAD

Но если вы видите такую ​​ошибку:

fatal: Unable to create '/directory/for/your/project/.git/index.lock': File exists.

Вы можете перейти в папку «.git», а затем удалить файл index.lock:

$ cd /directory/for/your/project/.git/
$ rm index.lock

Наконец, снова запустите команду:

$ git reset --hard HEAD
6 голосов
/ 15 июня 2016

Возможно, вы не хотите / должны хранить ваши работы / файлы в рабочем каталоге, а просто избавиться от них полностью. Команда git clean сделает это за вас.

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

Имейте в виду, что вы захотите быть очень осторожными с этой командой, так как она предназначена для удаления из вашего локального рабочего каталога файлов, которые НЕ ОТСЛЕЖИВАЮТСЯ. если вы неожиданно передумаете после выполнения этой команды, вы не вернетесь назад, чтобы просмотреть содержимое удаленных файлов. Более безопасная альтернатива - выполнить

git stash --all

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

Однако, если вы действительно хотите удалить все файлы и очистить ваш рабочий каталог, вы должны выполнить

git clean -f -d

Это удалит все файлы, а также любые подкаталоги, у которых нет элементов в результате выполнения команды. Перед выполнением команды git clean -f -d разумнее всего выполнить

git clean -f -d -n

, который покажет вам предварительный просмотр того, что будет удалено после выполнения git clean -f -d

Итак, вот сводка ваших вариантов от самых агрессивных до наименее агрессивных


Опция 1 : Удалить все файлы локально (наиболее агрессивно)

git clean -f -d

Вариант 2 : Предварительный просмотр вышеупомянутого воздействия (Предварительный просмотр наиболее агрессивный)

git clean -f -d -n

Вариант 3 : сохранение всех файлов (наименее агрессивный)

`git stash --all` 
...