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

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

Ответы [ 32 ]

44 голосов
/ 28 июля 2011

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

git diff | git apply --reverse
42 голосов
/ 17 мая 2016

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

например. git checkout -- .

41 голосов
/ 17 мая 2014

git checkout -f


man git-checkout:

-f, --force

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

При проверке путей из индекса не допускайте сбоев при необъединенных записях; вместо этого необработанные записи игнорируются.

36 голосов
/ 11 сентября 2015

Вы можете использовать git stash - если что-то пойдет не так, вы все равно сможете вернуться из stash. Аналогично некоторому другому ответу здесь, но этот также удаляет все неотмеченные файлы, а также все неразмеченные удаляет:

git add .
git stash

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

git stash drop

Ответ Билала Максуда с git clean также сработал для меня, но с тайником у меня больше контроля - если я сделаю что-то случайно, я все равно смогу вернуть свои изменения

UPDATE

Я думаю, что есть еще 1 изменение (не знаю, почему это работало для меня раньше):

git add . -A вместо git add .

без -A удаленные файлы не будут поставлены

33 голосов
/ 08 августа 2015

Вместо того, чтобы отменить изменения, я перенастроил свой пульт на источник. Обратите внимание - этот метод предназначен для полного восстановления вашей папки в папку репо.

Так что я делаю это, чтобы убедиться, что они не сидят там, когда я сбрасываю git (позже - исключая gitignores для Origin / branchname)

ПРИМЕЧАНИЕ. Если вы хотите, чтобы файлы еще не отслеживались, но не были в GITIGNORE, вы можете пропустить этот шаг, так как он сотрет эти неотслеживаемые файлы, не найденные в вашем удаленном хранилище (спасибо @XtrmJosh).

git add --all

Тогда я

git fetch --all

Тогда я возвращаюсь к началу

git reset --hard origin/branchname

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

Обновлено за комментарий пользователя ниже: Вариация для сброса текущей ветви пользователя.

git reset --hard @{u}
27 голосов
/ 15 октября 2011

Перепробовал все вышеперечисленные решения, но все еще не смог избавиться от новых, неподготовленных файлов.

Используйте git clean -f для удаления этих новых файлов - с осторожностью! Обратите внимание на параметр force.

21 голосов
/ 08 сентября 2016

Просто используйте:

git stash -u

Готово. Легко.

Если вам действительно небезразличен ваш стек, то вы можете выполнить git stash drop. Но в этот момент вам лучше использовать (от Мариуша Новака):

git checkout -- .
git clean -df

Тем не менее, мне нравится git stash -u лучше всего, потому что он «отбрасывает» все отслеженные и неотслеживаемые изменения всего за одной командой . Все же git checkout -- . только отбрасывает отслеженные изменения, и git clean -df отбрасывает только неотслеживаемые изменения ... и ввод обеих команд far слишком много работы:)

21 голосов
/ 24 апреля 2015

просто скажи

git stash

Это удалит все ваши локальные изменения. Вы также можете использовать позже, сказав

git stash apply 

или git stash pop

16 голосов
/ 05 сентября 2013

Это работает даже в каталогах, которые; за пределами нормальных разрешений git.

sudo chmod -R 664 ./* && git checkout -- . && git clean -dfx

случилось со мной недавно

14 голосов
/ 30 мая 2014
cd path_to_project_folder  # take you to your project folder/working directory 
git checkout .             # removes all unstaged changes in working directory
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...