Как очистить мой локальный рабочий каталог в 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>/*