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

Как удалить все изменения из рабочего каталога, включая новые необработанные файлы. Я знаю, что git checkout -f делает это, но не удаляет новые файлы без следа, созданные с момента последнего коммита.

Есть ли у кого-нибудь идеи, как это сделать?

Ответ 1

git reset --hard # removes staged and working directory changes

## !! be very careful with these !!
## you may end up deleting what you don't want to
## read comments and manual.
git clean -f -d # remove untracked
git clean -f -x -d # CAUTION: as above but removes ignored files like config.
git clean -fxd :/ # CAUTION: as above, but cleans untracked and ignored files through the entire repo (without :/, the operation affects only the current directory)

Ответ 2

Самый безопасный метод, который я часто использую:

git clean -fd

Ответ 3

Для всех неустановленных файлов используйте:

git checkout -- .

Важно отметить . в конце.

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

Ответ 4

Посмотрите на команду git clean.

git -clean - удалить необработанные файлы из рабочего дерева

Очищает рабочее дерево путем рекурсивного удаления файлов, которые не находятся под управлением версиями, начиная с текущего каталога.

Обычно удаляются только файлы, неизвестные git, но если указан параметр -x, игнорируются также файлы с игнорированием. Это может, например, быть полезным для удаления всех продуктов сборки.

Ответ 5

Следующие работы:

git add -A .
git stash
git stash drop [email protected]{0}

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

Типичный пример использования: вы переместили много файлов или каталогов, а затем хотите вернуться в исходное состояние.

Кредиты: fooobar.com/questions/138/...

Ответ 6

Вы можете сделать это в два этапа:

  • Отменить измененные файлы: git checkout -f
  • Удалить невоспроизводимые файлы: git clean -fd

Ответ 7

Я думал, что это (предупреждение: после будет уничтожить все)

$ git reset --hard HEAD
$ git clean -fd

reset для отмены изменений. Чистое удаление любых невоспроизводимых каталогов f и d.

Ответ 8

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

Вы можете сделать это в текущей ветке, например:

git add (-A) .
git commit -m"DISCARD: Temporary local changes"
git tag archive/local-changes-2015-08-01  # optional
git revert HEAD
git reset HEAD^^

Или вы можете сделать это на отдельной головке. (при условии, что вы начинаете на ветке BRANCHNAME):

git checkout --detach HEAD
git add (-A) .
git commit -m"DISCARD: Temporary local changes"
git tag archive/local-changes-2015-08-01  # optional
git checkout BRANCHNAME

Однако то, что я обычно делаю, это совершить в кусках, а затем назвать некоторые или все коммиты как "DISCARD:...". Затем используйте интерактивную перезагрузку, чтобы удалить плохие коммиты и сохранить хорошие.

git add -p  # Add changes in chunks.
git commit -m"DISCARD: Some temporary changes for debugging"
git add -p  # Add more stuff.
git commit -m"Docblock improvements"
git tag archive/local-changes-2015-08-01
git rebase -i (commit id)  # rebase on the commit id before the changes.
  # Remove the commits that say "DISCARD".

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

git lol и git lola ярлыки были очень полезны в этом рабочем процессе.

Ответ 9

Для конкретной папки, которую я использовал:

git checkout -- FolderToClean/*

Ответ 10

git clean -i сначала покажет вам элементы, которые нужно удалить, и продолжите после подтверждения. Я считаю это полезным при работе с важными файлами, которые не следует удалять случайно.

См. git help clean для получения дополнительной информации, включая некоторые другие полезные параметры.

Ответ 11

Если вы хотите отменить все изменения, вы можете использовать любую из допустимых опций в псевдониме в .gitconfig. Например:

[alias]
    discard = "!f() { git add . && git stash && git stash drop [email protected]{0}; }; f"

Использование: git discard

Ответ 12

git reset --hard origin/{branchName}

Он удалит все необработанные файлы.