Как отменить незафиксированные изменения, включая файлы и папки? - PullRequest
977 голосов
/ 27 апреля 2011

Существует ли команда git для отмены всех незафиксированных изменений в рабочем дереве и индексе, а также для удаления вновь созданных файлов и папок?

Ответы [ 12 ]

1648 голосов
/ 28 апреля 2011

Вы можете запустить эти две команды:

# Revert changes to modified files.
git reset --hard

# Remove all untracked files and directories. (`-f` is `force`, `-d` is `remove directories`)
git clean -fd
527 голосов
/ 21 июня 2013

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

git checkout -- .

И до этого вы можете перечислить файлы, которые будут возвращены без фактического выполнения каких-либо действий, просто чтобы проверить, что будетбывает, с:

git checkout --
103 голосов
/ 13 марта 2013

Используйте "git checkout - ...", чтобы отменить изменения в рабочем каталоге

git checkout -- app/views/posts/index.html.erb

или

git checkout -- *

удаляет все изменения, внесенные в файлы без изменений в состоянии git, например1007 *

modified:    app/controllers/posts.rb
modified:    app/views/posts/index.html.erb
50 голосов
/ 18 июля 2013

Один нетривиальный способ - запустить эти две команды:

  1. git stash Это переместит ваши изменения в тайник, и вы вернетесь в состояние ГОЛОВА
  2. git stash drop Это удалит последний тайник, созданный в последней команде.
17 голосов
/ 15 октября 2012
git clean -fd

не помогло, новые файлы остались. Я полностью удалил все рабочее дерево, а затем

git reset --hard

См. " Как очистить мой локальный рабочий каталог в git? " для получения совета по добавлению опции -x для очистки:

git clean -fdx

Примечание * Флаг 1012 * -x удалит все файлы, игнорируемые Git, поэтому будьте осторожны (см. Обсуждение в ответе, который я имею в виду).

12 голосов
/ 27 апреля 2011

Я думаю, что вы можете использовать следующую команду: git reset --hard

5 голосов
/ 19 июля 2016

Обратите внимание, что могут существовать файлы, которые, похоже, не исчезнут - они могут быть неотредактированными, но git мог пометить их как редактируемые из-за изменений CRLF / LF.Посмотрите, если вы недавно внесли некоторые изменения в .gitattributes.

В моем случае я добавил настройки CRLF в файл .gitattributes, и все файлы остались в списке «измененных файлов» из-за этого,Изменение настроек .gitattributes привело к их исчезновению.

4 голосов
/ 23 октября 2018

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

git checkout filename
0 голосов
/ 26 апреля 2019

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

git checkout .

Пример:

ABC@ABC-PC MINGW64 /c/xampp/htdocs/pod_admin (master)
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   application/controllers/Drivers.php
        modified:   application/views/drivers/add.php
        modified:   application/views/drivers/load_driver_info.php
        modified:   uploads/drivers/drivers.xlsx

no changes added to commit (use "git add" and/or "git commit -a")

ABC@ABC-PC MINGW64 /c/xampp/htdocs/pod_admin (master)
$ git checkout .

ABC@ABC-PC MINGW64 /c/xampp/htdocs/pod_admin (master)
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.

nothing to commit, working tree clean
0 голосов
/ 08 апреля 2016

Я обычно использую этот способ, который хорошо работает:

mv fold/file /tmp
git checkout fold/file
...