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

вопрос создан в Wed, Apr 17, 2019 12:00 AM

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

    
4349
  1. 2016-02-04 17: 11: 22Z
  2. git-clean удаляет только неотслеживаемые файлы из рабочего дерева 2016-09-15 12: 29: 43Z
  3. Чтобы уточнить комментарий Асенара выше, git-clean -df может быть опасным. Он удалит локальные неотслеживаемые файлы (например, закрытые .gitignore). Внимательно прочитайте все ниже и рассмотрите git checkout. вместо
    2016-10-07 08: 05: 12Z
  4. 'git clean -df' Будьте осторожны! Я попробовал это и потерял ключевые папки, которые невозможно восстановить ... Ой!
    2016-10-27 21: 01: 59Z
  5. нажатие git status дает подсказку, как это сделать! git checkout -- .
    2017-12-21 10: 42: 13Z
30 ответов                              30                         

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

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

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

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

    
2429
2018-09-11 00: 14: 38Z
  1. А чтобы быть внимательным, вам также понадобится --include-untracked.
    2015-03-23 ​​07: 45: 54Z
  2. @ KarimSamir: Вопрос, в частности, касается изменений, которых нет в индексе . Команда git reset также отменит изменения в индексе.
    2015-04-12 17: 28: 48Z
  3. git checkout -. намного быстрее
    2015-04-17 16: 16: 33Z
  4. Ни git stash, ни любая разновидность git checkout не будут отбрасывать неустановленные удаления. Согласно выводу git status, правильный правильный ответ здесь - git reset HEAD
    2015-05-27 22: 27: 26Z
  5. Это загрязняет стек хранения. git checkout -- . выполняет работу только с одной командой.
    2015-09-09 11: 17: 44Z

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

 
git checkout -- .

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

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

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

    
4765
2018-11-26 23: 54: 49Z
  1. Кажется, это канонический способ git. то есть именно то, что вам скажет git, если вы наберете git status
    2014-08-18 16: 01: 58Z
    Ля>
  2. Не работает, если есть неотслеживаемые файлы. Гит говорит error: The following untracked working tree files would be overwritten by checkout: ....
    2014-08-24 13: 26: 26Z
  3. вопрос новичка, что означает "git checkout -." значит семантически?
    2014-09-07 19: 21: 07Z
  4. @ Ninjack git checkout -- . означает то же самое, что и git checkout ., за исключением того, что вы явно указываете на то, что вы не указываете имя ветви. Они оба говорят, что стоит проверить версию HEAD в той ветке, в которой я сейчас нахожусь. или же './'. Если вы делаете git checkout branch-name directory-or-file-name в целом, вы получаете версию HEAD directory-or-file-name для ветви branch-name.
    2014-10-29 19: 55: 29Z
  5. IMO этот вариант несовершенен, так как не обрабатывает ситуацию, когда ваш измененный репозиторий не находится в ревизии HEAD в момент очистки изменений, и вы НЕ хотите обновите его до HEAD, и хотите просто очистить изменения.
    2015-01-05 17: 27: 44Z

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

 
git clean -df
git checkout -- .

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

    
1756
2017-03-29 02: 32: 17Z
  1. Два других ответа на самом деле не работают, этот работал.
    2014-09-01 12: 23: 56Z
  2. @ dval, так как первая команда удалила неиндексированные файлы, а вторая удалила неустановленные изменения (проиндексированных файлов). Так что если у вас не было никаких поэтапных изменений, это то же самое, что вернуться к последнему коммиту с git reset --hard
    2014-10-31 10: 47: 51Z
  3. используйте -dff , если неотслеживаемый каталог является git-клоном.
    2014-12-16 02: 52: 30Z
  4. Будьте внимательны при запуске git clean -df. Если вы не понимаете, что он делает, возможно, вы удаляете файлы, которые хотите сохранить, например robots.txt, загруженные файлы и т. Д.
    2015-01-28 14: 57: 56Z
  5. Как сказала @ctlockey, первая команда также удаляет каталоги, если они состоят только из игнорируемых файлов ... Потерян целый набор настроек файлы в моем проекте :( Будьте осторожны.
    2015-07-16 08: 00: 59Z

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

 
git checkout .

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

 
git checkout-index -a -f
    
306
2009-06-20 10: 28: 04Z
  1. Привет, в чем разница между git checkout . и git checkout -- .?
    2015-01-18 05: 10: 52Z
  2. @ Эван: в этом случае разницы нет.
    2015-04-19 13: 48: 23Z
  3. @ Роберт Симер и в общем случае?
    2015-06-05 12: 20: 08Z
  4. @ Evan: плохое место, чтобы задать этот вопрос. - Это не имеет отношения к вопросу об ОП и не связано с ответом здесь.
    2015-06-05 13: 53: 23Z
  5. + 1 Это ПРАВИЛЬНЫЙ ОТВЕТ, поскольку он правильно обрабатывает случай, когда в некоторых файлах были внесены и не поэтапные изменения. Обратите внимание, что это решение не учитывает неустановленные изменения; если вы хотите сохранить их, используйте ответ @ greg-hewgill на git stash save --keep-index.
    2015-06-15 15: 12: 18Z
 
git clean -df

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

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

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

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

    
230
2015-05-15 13: 42: 58Z
  1. почему этот ответ не имеет всех голосов? ответил еще в 2011 году и до сих пор правильно.
    2018-03-01 13: 20: 54Z

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

 
git checkout -p

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

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

 
git add -p
    
94
2015-02-23 19: 46: 03Z
  1. Мне нравится возможность видеть фактическое изменение до того, как оно будет отменено.
    2015-02-03 21: 42: 30Z
  2. Это то, что я использую. git checkout -p и затем "a", чтобы принять все.
    2015-04-24 06: 51: 42Z
  3. Я никогда не думал о. Это -p добавляет хороший дополнительный уровень безопасности. Объедините его с git clean -d, чтобы фактически ответить на OP.
    2016-04-27 06: 39: 50Z

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

 
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 . необходимо сделать в корне репо.

    
84
2018-03-17 23: 50: 38Z
  1. + 1 для этого решения. Что касается вашего замечания о том, что «git checkout. Должен быть сделан в корне репо», возможно, вы могли бы упомянуть, что мы можем просто сделать git reset --hard вместо этого? (что на самом деле эквивалентно git reset --hard HEAD и должно работать в зависимости от текущего каталога ...)
    2018-01-15 20: 19: 13Z
  2. Также, что касается первой команды git clean -dfx, вот совет, которым я пользуюсь, чтобы быть в безопасности перед его запуском: просто запустите git clean -d -x -n перед тем, чтобы отобразить список файлов. для удаления, затем подтвердите операцию, запустив git clean -d -x -f (в конце я поставил аргумент -n и, соответственно, -f, чтобы можно было быстро изменить его в терминале)
    2018-01-15 20: 33: 08Z
  3. Обратите внимание, что это необратимо, и если у вас есть файлы в .gitignore, вы потеряете их. Поэтому подумайте о резервном копировании своего проекта до этого.
    2018-04-03 03: 47: 00Z

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

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

    
58
2013-05-13 05: 41: 57Z

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

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

 
git checkout -- .

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

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

 
git stash -u

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

51
2017-10-23 09: 30: 10Z
  1. Дважды я приходил сюда, читал этот ответ и забыл . в конце. Для будущего меня: период необходим !
    2017-06-16 17: 13: 15Z
  2. Мне нужно было избавиться от всех локальных изменений в подкаталоге, не стирая все остальные изменения. Этот ответ очень помог, спасибо
    2017-09-07 04: 00: 29Z
  3. Пожалуйста, опишите, что делают две команды. Это действительно бесполезно без объяснения причин.
    2017-09-09 17: 22: 37Z
  4. отлично. Оформить заказ в одной команде, что самый популярный из двух. также можно использовать git clean -fd для очистки файлов, отсутствующих в индексе.
    2017-11-28 09: 03: 36Z
  5. Это единственный, который работал для меня.
    2018-09-28 21: 31: 02Z

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

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

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

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

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

 
git stash
  • Все изменения будут перенесены в Git's Stash для последующего доступа.
  • Доступны несколько опций для более детального хранения; см. документацию
46
2018-03-18 00: 19: 02Z
  1. Это точно преобразует ваши изменения и удаляет вновь добавленные файлы из предыдущего коммита.
    2019-02-21 01: 07: 57Z

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

 
git diff | git apply --reverse
    
44
2011-07-28 05: 27: 18Z
  1. это пропускает любые неотслеживаемые файлы, что может быть хорошо
    2011-12-22 20: 00: 21Z

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

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

    
42
2017-01-07 01: 28: 18Z
  1. Понижено, потому что это не помогает быстро отбросить все файлы. Три точки указывают, что вы должны перечислить все файлы. Это особенно плохо, если вам нужно удалить сразу несколько файлов, например. во время большого слияния после того, как вы сделали все изменения, которые хотите сохранить
    2016-06-09 15: 26: 55Z
  2. Конечно, правильная команда - "git checkout -." одна точка. В комментарии три точки были грамматическими, чтобы указать, что есть много других опций, которые могли бы быть использованы.
    2016-09-20 11: 01: 00Z

git checkout -f

man git-checkout:

-f, --force

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

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

    
41
2014-05-17 02: 28: 01Z
  1. Это отменит изменения в индексе !! (И ОП требует оставить их как есть.)
    2015-04-19 13: 59: 37Z

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

 
git add .
git stash

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

 
git stash drop

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

UPDATE

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

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

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

    
36
2015-10-21 08: 37: 52Z

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

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

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

 
git add --all

Тогда я

 
git fetch --all

Затем я возвращаюсь к источнику

 
git reset --hard origin/branchname

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

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

 
git reset --hard @{u}
    
33
2016-01-21 18: 04: 56Z
  1. Это мой предпочтительный вариант, но почему вы сначала добавляете все изменения? Насколько мне известно, это просто изменяет список каталогов в файлах Git, а при использовании git reset --hard это все равно будет потеряно, пока каталоги все еще будут удалены.
    2015-09-30 10: 00: 51Z
  2. Я не на Mac или Linux, Github Windows PowerShell иногда оставляет файлы там после сброса. Я думаю, потому что git reset устанавливает все файлы в репо в исходное состояние. Если они не добавлены, они не затронуты. После этого клиент рабочего стола получит сообщение «эй, этот файл здесь и его нужно зафиксировать»
    2015-10-01 17: 04: 49Z
  3. Смысл сделан. Я не пользуюсь Windows, поэтому не сталкивался с этой проблемой (по крайней мере, не пользовался Windows последние несколько месяцев, до этого мало что помнил - это одно огромное прискорбное пятно). Стоит отметить обоснование в вашем основном ответе:)
    2015-10-02 12: 18: 11Z
  4. Я тоже столкнулся с этой проблемой на Mac. Если файл не отслеживается в репо, иногда git reset его не трогает. Я не могу действительно изолировать «ПОЧЕМУ», но когда это происходит, если я сбрасываю, и у меня все еще есть 1 незафиксированный файл или два, я добавляю --all и сбрасываю --hard снова
    2015-11-19 02: 18: 10Z
  5. Приятный маленький вариант этого мне нравится - git reset --hard @{u}, который сбрасывает ветку туда, где находится текущая ветвь удаленного отслеживания
    2016-01-06 19: 39: 27Z

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

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

    
28
2011-10-14 21: 07: 27Z

просто скажи

 
git stash

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

 
git stash apply 

или     git stash pop

    
21
2015-06-30 22: 12: 32Z

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

 
git stash -u

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

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

 
git checkout -- .
git clean -df

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

    
21
2016-09-08 06: 19: 32Z
  1. Примечание. Вскоре git stash -u (Git 2.14.x /2.15, Q3 2017) будет развиваться немного: stackoverflow.com/a/46027357/6309
    2017-09-03 20: 10: 57Z
  2. Если я правильно понял вопрос OP, индексированные файлы должны быть сохранены. Только нестандартные изменения должны быть удалены. Так должно быть git stash -k по моему мнению.
    2018-02-01 08: 19: 21Z

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

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

со мной недавно произошло

    
16
2015-09-28 13: 29: 45Z
  1. Остерегайтесь, однако, что игнорируемое содержимое git не сохранит свои первоначальные разрешения! Следовательно, это может вызвать угрозу безопасности.
    2014-12-10 18: 06: 10Z
  2. @ doublejr Вы ошибаетесь, прочитайте git help clean "-d Удалите неотслеживаемые каталоги в дополнение к неотслеживаемым файлам."
    2014-12-10 22: 40: 41Z
  3. Почему вы установили все свои файлы для чтения /записи? Не очень хорошая практика.
    2015-09-28 11: 31: 54Z
  4. @ Ghoti мой плохой, 664 правильно? Вы также можете редактировать ответ.
    2015-09-28 13: 29: 21Z
  5. Установка всех разрешений на 664 делает много предположений о том, какие разрешения нужны проекту. Я думаю, что использование этой части команды вызовет проблемы у некоторых людей.
    2018-11-20 17: 12: 29Z
 
cd path_to_project_folder  # take you to your project folder/working directory 
git checkout .             # removes all unstaged changes in working directory
    
14
2014-05-31 10: 04: 10Z

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

 
git reset --hard <commit hash>

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

    
11
2018-01-29 16: 29: 26Z
  1. Это также отбрасывает все в индексе (не только вещи, не входящие в индекс), что находится за пределами того, что запрашивает OP.
    2018-07-08 07: 51: 17Z

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

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

    
10
2012-06-15 08: 55: 35Z

На мой взгляд,

 
git clean -df

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

  

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

Описание

  

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

     

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

     

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

Опции

  

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

     

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

    
10
2016-07-14 07: 03: 45Z

То, что следует, действительно является только решением, если вы работаете с форком репозитория, где вы регулярно синхронизируете (например, запрос на извлечение) с другим репо. Краткий ответ: удалите 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 также далеко не просто.

    
9
2014-01-13 16: 42: 46Z

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

 
# 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

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

    
7
2015-04-20 10: 39: 40Z
  1. На самом деле Git stash может иметь заголовок. Например, git stash save "Feature X work in progress".
    2014-12-09 22: 39: 11Z

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

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

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

 
discard = checkout --

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

 
discard .

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

 
discard filename

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

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

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

Таким образом, использование очень просто:

 
cleanout

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

7
2017-06-05 04: 51: 09Z

Если все подготовленные файлы были фактически зафиксированы, тогда ветку можно просто сбросить, например, из вашего графического интерфейса примерно тремя щелчками мыши: Ветка , Сброс , Да !

Итак, на практике я часто обращаюсь к нежелательным локальным изменениям, чтобы зафиксировать все хорошие вещи, а затем сбросить ветку.

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

Возможно, это не то техническое решение, которое вы ищете для своей проблемы, но я считаю это очень практичным решением. Это позволяет вам выборочно отказаться от внесенных изменений, сбрасывать изменения, которые вам не нравятся, и сохранять те, которые вы делаете.

Итак, я просто делаю коммит , сброс ветвей и изменяю последний коммит .

    
6
2015-09-04 09: 56: 53Z

Если вы используете субмодуль и другие решения не работают, попробуйте:

  • Чтобы проверить, в чем проблема (возможно, «грязный» случай), используйте:

    git diff

  • Удалить тайник

    git submodule update

6
2017-07-18 12: 22: 21Z

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

  

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

    
6
2017-07-18 12: 23: 33Z

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

git update-index --assume-unchanged file_to_ignore

    
6
2017-07-31 15: 57: 59Z
источник размещен Вот
Другие вопросы
2
ListView vs LinearLayout
спросил 3 года назад
4
SQL Условный Где
спросил 10 лет назад