Как очистить мой локальный рабочий каталог в git?

Как я могу очистить мой рабочий каталог в git?

6 ответов

Решение

Чтобы вернуть конкретный файл в состояние с последним подтверждением (чтобы отменить незафиксированные изменения в определенном файле):

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 для интерактивного режима, и он скажет вам, что будет удалено.

Соответствующие ссылки:

git clean -df

Редактировать: это не очень хорошо рекламируется, но git clean действительно удобно. Git Ready имеет хорошее введение вgit clean,

Обновление: удалил x пометка на основе предложения в комментарии ниже

Все ответы до сих пор сохраняют локальные коммиты. Если вы действительно серьезны, вы можете отменить все локальные коммиты и все локальные изменения, выполнив:

git reset --hard origin/branchname

Например:

git reset --hard origin/master

Это позволяет вашему локальному хранилищу точно соответствовать состоянию источника (кроме неотслеживаемых файлов).

Если вы случайно сделали это после того, как просто прочитали команду, а не то, что она делает:), используйте git reflog, чтобы найти ваши старые коммиты.

Вы можете создать коммит, который содержит пустую рабочую копию.

Это в целом безопасный, неразрушающий подход, поскольку он не предусматривает использование каких-либо механизмов сброса методом перебора. Сначала вы скрываете весь управляемый контент 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 вложенные папки.

Чтобы переключиться на другую ветку, отбрасывая все незафиксированные изменения (например, в результате странной обработки Git окончаний строк):

git checkout -f <branchname>

У меня была рабочая копия с сотнями измененных файлов (но пустая git diff --ignore-space-at-eol) от которого я не смог избавиться ни с одной из команд, которые я здесь прочитал, и git checkout <branchname> тоже не сработает - если не -f (или же --force) вариант.

Чтобы сбросить определенный файл, как подсказывает состояние git:

git checkout <filename>

Сбросить папку

git checkout <foldername>/*
Другие вопросы по тегам