Вопрос: Как отказаться от неустановленных изменений в Git?

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




Еще один быстрый способ:

git stash save --keep-index

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

После этого вы можете git stash dropесли хотите.


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

git checkout -- .

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

git checkout path/to/file/to/revert

Обязательно укажите период в конце.


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

git clean -df
git checkout -- .

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


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

git checkout .

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

git checkout-index -a -f


git clean -df

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

-d: Удалить ненужные каталоги в дополнение к необработанным файлам

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

Бег git help cleanпосмотреть руководство


My favorite is

git checkout -p

That lets you selectively revert chunks.

See also:

git add -p


Since no answer suggests the exact option combination that I use, here it is:

git clean -dfx
git checkout .

This is the online help text for the used git clean options:


Remove untracked directories in addition to untracked files. If an untracked directory is managed by a different Git repository, it is not removed by default. Use -f option twice if you really want to remove such a directory.


If the Git configuration variable clean.requireForce is not set to false, Git clean will refuse to delete files or directories unless given -f, -n, or -i. Git will refuse to delete directories within the .git subdirectory or file, unless a second -f is given.


Don’t use the ignore rules from .gitignore (per directory) and $GIT_DIR/info/exclude, but do still use the ignore rules given with -e options. This allows removing all untracked files, including build products. This can be used (possibly in conjunction with git reset) to create a pristine working directory to test a clean build.

Also, git checkout . needs to be done in the root of the repo.


I really found this article helpful for explaining when to use what command: http://www.szakmeister.net/blog/2011/oct/12/reverting-changes-git/

There are a couple different cases:

  1. If you haven't staged the file, then you use git checkout. Checkout "updates files in the working tree to match the version in the index". If the files have not been staged (aka added to the index)... this command will essentially revert the files to what your last commit was.

    git checkout -- foo.txt

  2. If you have staged the file, then use git reset. Reset changes the index to match a commit.

    git reset -- foo.txt

I suspect that using git stash is a popular choice since it's a little less dangerous. You can always go back to it if you accidently blow too much away when using git reset. Reset is recursive by default.

Take a look at the article above for further advice.


The easiest way to do this is by using this command:

This command is used to discard changes in working directory -

git checkout -- .


In git command, stashing of untracked files is achieved by using:

git stash -u



If you aren't interested in keeping the unstaged changes (especially if the staged changes are new files), I found this handy:

git diff | git apply --reverse


As you type git status, (use "git checkout -- ..." to discard changes in working directory) is shown.

e.g. git checkout -- .


git checkout -f

man git-checkout:

-f, --force

When switching branches, proceed even if the index or the working tree differs from HEAD. This is used to throw away local changes.

When checking out paths from the index, do not fail upon unmerged entries; instead, unmerged entries are ignored.