Как мне отменить неустановленные изменения в Git? - PullRequest
4319 голосов
/ 09 сентября 2008

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

Ответы [ 32 ]

4725 голосов
/ 09 сентября 2008

Для всех неотмеченных файлов в текущем рабочем каталоге используйте:

git checkout -- .

Для конкретного файла используйте:

git checkout -- path/to/file/to/revert

-- здесь, чтобы удалить двусмысленность аргумента .

2418 голосов
/ 09 сентября 2008

Другой более быстрый способ:

git stash save --keep-index --include-untracked

Вам не нужно включать --include-untracked, если вы не хотите быть тщательным об этом.

После этого вы можете сбросить этот тайник командой git stash drop, если хотите.

1748 голосов
/ 29 августа 2012

Похоже, полное решение:

git clean -df
git checkout -- .

git clean удаляет все неотслеживаемые файлы ( предупреждение : хотя он не удаляет игнорируемые файлы, упомянутые непосредственно в .gitignore, может удалять игнорируемые файлы, находящиеся в папках ) и git checkout удаляет все неустановленные изменения.

304 голосов
/ 20 июня 2009

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

git checkout .

или этот, который проверяет все файлы из индекса, перезаписывая файлы рабочего дерева.

git checkout-index -a -f
229 голосов
/ 07 декабря 2011
git clean -df

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

-d: удаление неотслеживаемых каталогов в дополнение к неотслеживаемым файлам

-f: Сила (может не требоваться в зависимости от настройки clean.requireForce)

Запустите git help clean, чтобы увидеть руководство

93 голосов
/ 10 октября 2014

Мой любимый это

git checkout -p

Это позволяет вам выборочно возвращать фрагменты.

Смотри также:

git add -p
82 голосов
/ 28 апреля 2016

Поскольку ни один ответ не предлагает точную комбинацию опций, которую я использую, вот она:

git clean -dfx
git checkout .

Это текст интерактивной справки для используемых git clean параметров:

-d

Удалите неотслеживаемые каталоги в дополнение к неотслеживаемым файлам. Если неотслеживаемый каталог управляется другим Git-репозиторием, по умолчанию он не удаляется. Используйте параметр -f дважды, если вы действительно хотите удалить такой каталог.

-f

Если переменная конфигурации Git clean.requireForce не установлена ​​на false, Git clean откажется от удаления файлов или каталогов, если не указано -f, -n или -i. Git откажется от удаления каталогов в подкаталоге или файле .git, если не указан второй -f.

-x

Не используйте правила игнорирования из .gitignore (для каждого каталога) и $GIT_DIR/info/exclude, но все равно используйте правила игнорирования, заданные с опциями -e. Это позволяет удалить все неотслеживаемые файлы, включая продукты сборки. Это можно использовать (возможно, в сочетании с git reset) для создания нетронутого рабочего каталога для тестирования чистой сборки.

Кроме того, git checkout . необходимо сделать в корне репо.

58 голосов
/ 14 августа 2012

Я действительно нашел эту статью полезной для объяснения, когда использовать какую команду: http://www.szakmeister.net/blog/2011/oct/12/reverting-changes-git/

Есть несколько разных случаев:

  1. Если вы еще не поставили файл, вы используете git checkout. Оформить заказ "обновляет файлы в рабочем дереве в соответствии с версией в индексе". Если файлы не были размещены (или добавлены в индекс) ... эта команда по существу вернет файлы к тому, что было вашим последним коммитом.

    git checkout -- foo.txt

  2. Если вы поставили файл, используйте git reset. Сброс изменяет индекс в соответствии с фиксацией.

    git reset -- foo.txt

Я подозреваю, что использование git stash является популярным выбором, поскольку оно немного менее опасно. Вы всегда можете вернуться к нему, если случайно унесете слишком много, используя Git Reset. Сброс по умолчанию рекурсивный.

Посмотрите на статью выше для дальнейших советов.

51 голосов
/ 12 апреля 2017

Самый простой способ сделать это с помощью этой команды:

Эта команда используется для отмены изменений в рабочем каталоге -

git checkout -- .

https://git -scm.com / docs / git-checkout

В команде git сохранение неотслеживаемых файлов достигается с помощью:

git stash -u

http://git -scm.com / документы / ГИТ-притон

46 голосов
/ 18 марта 2018

Если вы просто хотите удалить изменения в существующих файлах , используйте checkout ( задокументировано здесь ).

git checkout -- .
  • Ветвь не указана, поэтому она проверяет текущую ветвь.
  • Двойной дефис (--) сообщает Git, что последующее следует принять в качестве второго аргумента (пути), что вы пропустили спецификацию ветви.
  • Точка (.) указывает все пути.

Если вы хотите, чтобы удалял файлы, добавленные с момента вашей последней фиксации, используйте clean ( задокументировано здесь ):

git clean -i 
  • Опция -i запускает интерактивную clean, чтобы предотвратить ошибочные удаления.
  • Несколько других опций доступны для более быстрого выполнения; см. документацию

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

git stash
  • Все изменения будут перенесены в Git's Stash для возможного последующего доступа.
  • Доступны несколько опций для более детального хранения; см. документацию
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...