Как очистить мой локальный рабочий каталог в Git?
Как я могу очистить мой рабочий каталог в Git?
Ответы
Ответ 1
Чтобы вернуть определенный файл в состояние с последним подтверждением (чтобы отменить незафиксированные изменения в определенном файле):
git checkout thefiletoreset.txt
Это упоминается в выходных данных git status
:
(use "git checkout -- <file>..." to discard changes in working directory)
Чтобы сбросить весь репозиторий до последнего зафиксированного состояния:
git reset --hard
Чтобы удалить неотслеживаемые файлы, я обычно просто удаляю все файлы в рабочей копии (но не , а папку .git/
!), а затем выполняю git reset --hard
, в котором остаются только зафиксированные файлы.
Лучше использовать git clean
(предупреждение: использование флага -x
, как показано ниже, приведет к тому, что Git удалит пропущенные файлы):
git clean -d -x -f
удалит неотслеживаемые файлы, включая каталоги (-d
) и файлы, игнорируемые git (-x
). Замените аргумент -f
на -n
, чтобы выполнить пробный прогон, или -i
для интерактивного режима, и он сообщит вам, что будет удалено.
Соответствующие ссылки:
Ответ 2
Использование:
git clean -df
Это не очень хорошо рекламируется, но git clean
действительно удобно. В Git Ready есть хорошее введение в git clean
.
Ответ 3
Все ответы до сих пор сохраняют локальные коммиты. Если вы серьезно действительно, вы можете отменить все локальные коммиты и все локальные изменения, выполнив следующие действия:
git reset --hard origin/branchname
Например:
git reset --hard origin/master
Это делает ваш локальный репозиторий в точности совпадающим с состоянием источника (кроме файлов без следа).
Если вы случайно это сделали, просто прочитав команду, а не то, что она делает:), используйте git reflog, чтобы найти свои старые фиксации.
Ответ 4
Вы можете создать коммит, который содержит пустую рабочую копию.
Это в целом безопасный, неразрушающий подход, поскольку он не предусматривает использования каких-либо механизмов сброса методом перебора. Сначала вы скрываете весь управляемый контент с помощью git checkout empty
, затем вы можете вручную просмотреть и удалить оставшийся неуправляемый контент.
## create a stand-alone, tagged, empty commit
true | git mktree | xargs git commit-tree | xargs git tag empty
## clear the working copy
git checkout empty
Ваша рабочая копия теперь должна быть очищена от любого управляемого содержимого. Все, что осталось, это неуправляемые файлы и сама папка .git
.
Чтобы заново заполнить вашу рабочую копию...
git checkout master ## or whatever branch you will be using
Если вы дальновидный человек, вы можете начать свой репозиторий с правой ноги, основав все на первоначальном пустом коммите...
git init
git commit --allow-empty --allow-empty-message -m ""
git tag empty
...
Существуют различные варианты использования тегированного пустого рабочего дерева. Мое любимое на данный момент - удалить корень из подпапок git worktree
.
Ответ 5
Чтобы переключиться на другую ветвь, отбрасывая все незафиксированные изменения (например, в результате Git странной обработки строк):
git checkout -f <branchname>
У меня была рабочая копия с сотнями измененных файлов (но пустая git diff --ignore-space-at-eol
), которые я не мог избавиться от любой из команд, которые я читал здесь, и git checkout <branchname>
тоже не будет работать - если только не указано параметр -f
(или --force
).
Ответ 6
Чтобы reset указать определенный файл как git статус:
git checkout <filename>
В reset папку
git checkout <foldername>/*