Как мне отменить неустановленные изменения в Git?

4821

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

Readonly
источник
9
git-cleanтолько удаляет неотслеживаемые файлы из рабочего дерева git-scm.com/docs/git-clean
Yega
24
Чтобы уточнить комментарий Асенара выше, git-clean -dfможет быть опасно. Он удалит локальные неотслеживаемые файлы (например, закрытые .gitignore). Внимательно прочитайте все ниже и рассмотрите git checkout. вместо этого
Джакантербери
15
'git clean -df' Будьте осторожны! Я попробовал это и потерял ключевые папки, которые невозможно восстановить ... Ой!
Гейб Карканис
46
удар git statusдает предложение о том, как это сделать! git checkout -- .
Пауло
4
@Paulo: начиная с июля 2019 года, git statusдает предложение: git restore. git restoreэто новая команда именно для этой цели. Смотрите мое обновление 2019 года .
Просоитос

Ответы:

2687

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

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

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

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

Грег Хьюгилл
источник
122
И чтобы быть внимательным, вы бы тоже хотели --include-untracked.
TJ Crowder
9
@KarimSamir: Вопрос, в частности, касается изменений, которых нет в индексе . Команда git resetтакже отменит изменения в индексе.
Грег Хьюгилл
146
git checkout -. намного быстрее
Фрэнк
38
Ни то git stash, ни другое не git checkoutотменяет неустановленные удаления. Согласно выводу git status, фактический правильный ответ здесь - это немного ароматаgit reset HEAD
Крис Варт
127
Это загрязняет тайник. git checkout -- .выполняет работу только с одной командой
Фелипе Тонелло
5341

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

git checkout -- .

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

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

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

Tobi
источник
117
Это, кажется, мерзкий канонический путь. т.е. именно то, что git говорит вам делать, если вы git status
печатаете
27
Не работает, если есть неотслеживаемые файлы. Гит говорит error: The following untracked working tree files would be overwritten by checkout: ....
Майкл Илес
92
вопрос новичка, что означает "git checkout -". значит семантически?
сказал
120
@Ninjack git checkout -- .означает то же самое git checkout ., за исключением того, что вы явно говорите о том, что вы не указываете имя ветви. Они оба говорят, что стоит проверить версию HEAD в той ветке, в которой я сейчас нахожусь. или './'. Если вы делаете git checkout branch-name directory-or-file-nameв целом, вы получаете версию HEAD directory-or-file-nameна ветке branch-name.
akgill
23
IMO этот вариант несовершенен, так как он не обрабатывает ситуацию, когда ваш измененный репозиторий не находится в ревизии HEAD в момент очистки изменений, и вы НЕ хотите обновлять его до HEAD и хотите просто очистить изменения.
alexykot
1899

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

git clean -df
git checkout -- .

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

Мариуш Новак
источник
116
Два других ответа на самом деле не работают, этот сработал.
Джон Хант
18
@dval это потому, что первая команда удалила неиндексированные файлы, а вторая удалила неотмеченные изменения (из проиндексированных файлов). Так что если у вас не было никаких поэтапных изменений, это все равно, что вернуться к последнему коммиту сgit reset --hard
Amanuel Nega
3
используйте -dff, если каталог без отслеживания является git-клоном.
обвинение
87
Будьте осторожны, запустив git clean -df. Если вы не понимаете, что он делает, возможно, вы удаляете файлы, которые хотите сохранить, например robots.txt, загруженные файлы и т. Д.
ctlockey
40
Как сказал @ctlockey, первая команда также удаляет каталоги, если они состоят только из игнорируемых файлов ... Потерял целую кучу файлов конфигурации в моем проекте :( Будьте осторожны.
Максим Лорант,
326

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

git checkout .

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

git checkout-index -a -f
CB Bailey
источник
28
Привет, в чем разница между git checkout .и git checkout -- .?
Эван Ху
5
@Evan: нет разницы в этом случае.
Роберт Симер
10
@ Роберт Симер и в общем случае?
RJFalconer
2
@Evan: плохое место, чтобы задать этот вопрос. - Это не связано с вопросом о ФП и не связано с ответом здесь.
Роберт Симер
14
+1 Это ПРАВИЛЬНЫЙ ОТВЕТ, так как он правильно обрабатывает случай, когда некоторые файлы имеют как поэтапные, так и не поэтапные изменения. Обратите внимание, что это решение не учитывает неустановленные изменения; если вы хотите сохранить их, используйте ответ @ greg-hewgill git stash save --keep-index.
Rhubbarb
248
git clean -df

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

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

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

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

Элвис Чиотти
источник
почему этот ответ не имеет всех голосов? ответил еще в 2011 году и до сих пор правильно.
Евгений Брагинец
106

Мой любимый

git checkout -p

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

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

git add -p
Бен
источник
9
Я люблю способность видеть фактическое изменение прежде, чем оно будет сброшено.
Penghe Geng
Это то, что я использую. git checkout -p и затем "a", чтобы принять все.
Маттис
2
Я никогда не думал о. Это -pдобавляет хороший дополнительный уровень безопасности. Объедините это с, git clean -dчтобы фактически ответить на OP.
Стефан Хеннингсен
96

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

git clean -dfx
git checkout .

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

-d

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

-f

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

-x

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

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

Мартин Г
источник
+1 за это решение. Что касается вашего замечания о том, что «git checkout. Должен быть сделан в корне репо», возможно, вы могли бы упомянуть, что мы можем просто сделать git reset --hardвместо этого? (что на самом деле эквивалентно git reset --hard HEADи должно работать в зависимости от текущего каталога ...)
ErikMD
2
git clean -dfxЧто касается первой команды , вот подсказка, которую я использую, чтобы быть в безопасности перед ее выполнением: просто запустите git clean -d -x -nпрежде, чтобы отобразить список файлов, которые нужно удалить, затем подтвердите операцию, выполнив git clean -d -x -f(я поставил аргумент -nи, соответственно, -fв конце, чтобы иметь возможность быстро изменить его в терминале)
ErikMD
5
Заметьте, что это необратимо, и если у вас есть файлы, .gitignoreвы потеряете их. Поэтому подумайте о резервном копировании вашего проекта до этого.
Роб
69

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

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

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

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

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

git stash
  • Все изменения будут перенесены в Git's Stash для последующего доступа.
  • Несколько вариантов доступны для более детального хранения; см. документацию
2540625
источник
Это точно преобразует ваши изменения и удаляет вновь добавленные файлы из предыдущего коммита.
Йохан Чунг
проголосовал за это за объяснение :)
Арчи Г. Киньонес
62

Я действительно нашел эту статью полезной для объяснения, когда использовать какую команду: 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. Сброс является рекурсивным по умолчанию.

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

blak3r
источник
60

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

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

git checkout -- .

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

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

git stash -u

http://git-scm.com/docs/git-stash

AHM Forhadul Ислам
источник
19
Дважды я приходил сюда, читал этот ответ и забывал .в конце. Для будущего меня: период необходим !
Бежадо
2
Мне нужно было избавиться от всех локальных изменений в подкаталоге, не стирая все остальные изменения. Этот ответ очень помог, спасибо
союзник
2
Пожалуйста, опишите, что делают две команды. Это действительно бесполезно без объяснения причин.
Крис Кеннеди
2
отлично. Оформить заказ в одной команде, что самый популярный из двух. также можно git clean -fdвыполнить очистку файлов, отсутствующих в индексе.
oligofren
49

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

git diff | git apply --reverse
Джошуа Кунцманн
источник
44

git checkout -f


man git-checkout:

-f, --force

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

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

Bijan
источник
2
Это отбросило бы изменения в индексе !! (И ОП требует оставить их как есть.)
Роберт Симер
44

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

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

Эрдем ОЗДЕМИР
источник
1
Понижено, потому что это не помогает быстро удалить все файлы. Три точки указывают, что вы должны перечислить все файлы. Это особенно плохо, если вам нужно удалить сразу несколько файлов, например. во время большого слияния после того, как вы сделали все изменения, которые хотите сохранить,
usr-local-ΕΨΗΕΛΩΝ
2
Конечно, правильная команда - «git checkout -». одна точка. В комментарии три точки были грамматическими, чтобы указать, что есть много других вариантов, которые могли быть использованы ..
Josef.B
39

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

git add .
git stash

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

git stash drop

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

ОБНОВИТЬ

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

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

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

Asped
источник
39

2019 обновление:

С июля 2019 года , там была новая команда , которая делает именно это: git restore.

В git status, теперь Git рекомендует использовать эту команду вместо того, git checkoutкак раньше.

Хотя эту команду также можно использовать для восстановления рабочего дерева до определенного коммита или для восстановления содержимого индекса, по умолчанию рабочее дерево восстанавливается до состояния в индексе (о чем здесь говорится).

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

git restore <pathspec>

Например, чтобы восстановить все неотмеченные изменения в текущем каталоге, вы можете выполнить:

git restore .

Если вы запустите это из корня проекта, он восстановит все неустановленные изменения во всем хранилище.

Обратите внимание, что, как и в случае с git checkout -- .(как указал Mariusz Nowak), при этом будут отменены только изменения в файлах, отслеживаемых Git, и не будут удалены любые новые неотслеживаемые файлы. Если вы хотите отменить любые неотмеченные изменения, включая новые неотслеживаемые файлы, вы можете запустить дополнительные:

git clean -df

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


Примечание git restore: поскольку это новая команда, ее страница руководства выдает предупреждение:

Эта команда является экспериментальной. Поведение может измениться.

Таким образом, возможно, что этот ответ может устареть, если поведение изменится в будущем. Таким образом, может быть целесообразно быстро запустить его man git-restoreперед использованием.

prosoitos
источник
2
Я хотел отменить только мои незатронутые изменения, не затрагивая вновь добавленные файлы, поэтому он git restore .работал отлично. Спасибо.
Саурабх Мишра
3
Я сделал, git restore <filename>и это сработало отлично.
Мерлин
1
Работал нормально для меня.
Прометей
1
Согласно man-странице, git restore .восстанавливает все файлы в текущем каталоге, а не во всем хранилище.
Ярно
1
Вы правы. Спасибо! Я только что проверил это, и это действительно так. Это, однако, рекурсивно. Таким образом, при запуске из корня проекта это относится ко всему хранилищу. Я отредактирую свой ответ.
Просоитос
35

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

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

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

git add --all

Затем я

git fetch --all

Потом я сбрасываю на источник

git reset --hard origin/branchname

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

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

git reset --hard @{u}
Ник
источник
Это мой предпочтительный вариант, но почему вы сначала добавляете все изменения? Насколько я знаю, это просто изменяет список каталогов в файлах Git, а при использовании git reset --hard это все равно будет потеряно, в то время как каталоги все еще будут удалены.
XtrmJosh
Я не на Mac или Linux, Github Windows PowerShell иногда оставляет файлы после сброса. Я думаю, потому что git reset устанавливает все файлы в репо в исходное состояние. Если они не добавлены, они не затронуты. Затем настольный клиент получит сообщение «эй, этот файл здесь и его нужно зафиксировать»
Ник
Смысл сделан. Я не пользуюсь Windows, поэтому не сталкивался с этой проблемой (по крайней мере, не пользовался Windows последние несколько месяцев, до этого мало что помнил - это одно огромное прискорбное пятно). Может быть стоит отметить обоснование в вашем основном ответе :)
XtrmJosh
Я тоже столкнулся с этой проблемой на Mac. Если файл не отслеживается в репо, иногда git reset его не трогает. Я не могу действительно изолировать «ПОЧЕМУ», но когда это происходит, если я перезагружаюсь, и у меня все еще есть 1 незафиксированный файл или два, я добавляю --all и сбрасываю
Ник
2
Хороший небольшой вариант этого мне нравится, git reset --hard @{u}который сбрасывает ветку туда, где находится текущая ветвь удаленного отслеживания
user2221343
31

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

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

артур
источник
21

просто скажи

git stash

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

git stash apply 

или Git Stash поп

piyushmandovra
источник
21

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

git stash -u

Выполнено. Легко.

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

git checkout -- .
git clean -df

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

Бен Уайльд
источник
Примечание: git stash -uскоро (Git 2.14.x / 2.15, 3-й квартал 2017 г.) будет немного развиваться: stackoverflow.com/a/46027357/6309
VonC
Если я правильно понял вопрос ОП, индексированные файлы должны быть сохранены. Только нестандартные изменения должны быть удалены. Так должно быть git stash -kна мой взгляд.
оснастке
21

Чтобы сделать постоянный сброс: git reset --hard

Чтобы сохранить изменения на потом: git stash

SANGEETHA PH
источник
16

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

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

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

GlassGhost
источник
Остерегайтесь, однако, что игнорируемый контент git не сохранит свои первоначальные разрешения! Следовательно, это может вызвать угрозу безопасности.
дважды
@twicejr Вы не правы, прочитайте git help clean"-d Удалите неотслеживаемые каталоги в дополнение к неотслеживаемым файлам".
GlassGhost
Почему вы установили все свои файлы для чтения / записи? Не хорошая практика.
Готи
@ Хоть мой плохой, 664 правильный? Вы также можете редактировать ответ.
GlassGhost
Установка всех разрешений на 664 делает много предположений о том, какие разрешения нужны проекту. Я думаю, что использование этой части команды вызовет проблемы у некоторых людей.
ianrandmckenzie
15

у вас очень простая команда git git checkout .

Хем Радж Регми
источник
14
cd path_to_project_folder  # take you to your project folder/working directory 
git checkout .             # removes all unstaged changes in working directory
vivekporwal04
источник
12

По моему мнению,

git clean -df

должен сделать свое дело. Согласно документации Git по git clean

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

Описание

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

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

Если заданы необязательные аргументы ..., затрагиваются только эти пути.

Опции

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

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

Lahiru
источник
11

Независимо от того, в каком состоянии находится ваш репо, вы всегда можете вернуться к любой предыдущей фиксации:

git reset --hard <commit hash>

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

msangel
источник
2
Это также отбрасывает все в индексе (не только вещи, не входящие в индекс), что выходит за рамки того, что запрашивает OP.
Линус Арвер
10

Другой способ избавиться от новых файлов, который более специфичен, чем git clean -df (это позволит вам избавиться от некоторых файлов, не обязательно всех), - сначала добавить новые файлы в индекс, затем спрятать, а затем удалить заначка.

Этот метод полезен, когда по какой-то причине вы не можете легко удалить все неотслеживаемые файлы каким-либо обычным механизмом (например, rm).

tjb
источник
9

То, что следует, действительно является только решением, если вы работаете с форком репозитория, где вы регулярно синхронизируете (например, запрос на извлечение) с другим репо. Краткий ответ: удалите fork и refork, но прочтите предупреждения на github .

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

У меня часто бывали такие сообщения о состоянии git (по крайней мере, 2/4 файла):

$ git status
# Not currently on any branch.
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/constraint_s2var.dats
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/parsing/parsing_s2var.dats
#
# 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:   doc/PROJECT/MEDIUM/ATS-constraint/constraint_s2Var.dats
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/parsing/parsing_s2Var.dats

Зоркий глаз заметит, что в этих файлах есть допплангеры, которые в случае отключения - одна буква. Каким-то образом, и я понятия не имею, с чего начался этот путь (поскольку я сам не работал с этими файлами из репозитория верхнего уровня), я переключил эти файлы. Попробуйте множество решений, перечисленных на этой странице (и других страницах), похоже, не помогло.

Я смог решить эту проблему, удалив свой разветвленный репозиторий и все локальные репозитории, а затем повторив его. Одного этого было недостаточно; апстрим должен был переименовать файлы в новые имена файлов. До тех пор, пока у вас не будет никакой беспристрастной работы, нет вики и нет проблем, которые расходятся с вышестоящим хранилищем, у вас все будет в порядке. Upstream может быть не очень доволен вами, если не сказать больше. Что касается моей проблемы, то это, несомненно, ошибка пользователя, так как я не настолько опытен в git, но тот факт, что исправить проблему с git также нелегко.

bbarker
источник
7

Когда вы хотите передать тайник кому-то еще:

# add files
git add .  
# diff all the changes to a file
git diff --staged > ~/mijn-fix.diff
# remove local changes 
git reset && git checkout .
# (later you can re-apply the diff:)
git apply ~/mijn-fix.diff

[отредактируйте] как прокомментировано, можно назвать тайники. Ну, используйте это, если вы хотите поделиться своим тайником;)

twicejr
источник
5
На самом деле Git stash может иметь заголовок. Например git stash save "Feature X work in progress".
Колин Д. Беннетт
7

Вы можете создать свой собственный псевдоним, который описывает, как сделать это в описательной форме.

Я использую следующий псевдоним, чтобы отменить изменения.


Отменить изменения в (списке) файлах в рабочем дереве

discard = checkout --

Затем вы можете использовать его как следующий, чтобы отменить все изменения:

discard .

Или просто файл:

discard filename

В противном случае, если вы хотите отменить все изменения, а также неотслеживаемые файлы, я использую сочетание checkout и clean:

Очистить и отменить изменения и неотслеживаемые файлы в рабочем дереве

cleanout = !git clean -df && git checkout -- .

Таким образом, использование просто как следующее:

cleanout

Теперь доступно в следующем репозитории Github, который содержит много псевдонимов:

Pau
источник
7

У меня была странная ситуация, когда файл всегда был неподготовленным, это помогает мне решить проблему.

git rm .gitattributes
git add -A
git reset --hard

SDV
источник