git: переключить ветку и игнорировать любые изменения без фиксации - PullRequest
277 голосов
/ 20 августа 2009

Я работал над веткой git и был готов зафиксировать свои изменения, поэтому я сделал коммит с полезным сообщением коммита. Затем я рассеянно внес небольшие изменения в код, которые не стоит хранить. Теперь я хочу сменить ветку, но Git дает мне,

ошибка: у вас есть локальные изменения на «X»; не может переключать ветви.

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

Ответы [ 12 ]

354 голосов
/ 20 августа 2009

Вам нужно чистое состояние, чтобы сменить ветки. Оформление ветки будет разрешено только в том случае, если оно не влияет на «грязные файлы» (как замечает Чарльз Бейли в комментариях).

В противном случае вам следует:

  • тайник ваше текущее изменение или
  • reset --hard HEAD (если вы не против потерять эти незначительные изменения) или
  • checkout -f (При переключении ветвей продолжайте работу, даже если индекс или рабочее дерево отличается от HEAD. Это используется для исключения локальных изменений.)
113 голосов
/ 20 августа 2009

Если вы хотите отменить изменения,

git checkout -- <file>
git checkout branch

Если вы хотите сохранить изменения,

git stash save
git checkout branch
git stash pop
59 голосов
/ 11 октября 2009

ну, должно быть

git stash save
git checkout branch
// do something
git checkout oldbranch
git stash pop
15 голосов
/ 20 августа 2009

Следуй,

$: git checkout -f

$: git checkout next_branch
14 голосов
/ 03 августа 2011

Обратите внимание, что если вы объединили удаленные ветви или имеете локальные коммиты и хотите вернуться к удаленному HEAD, вы должны сделать:

git reset --hard origin/HEAD

HEAD само по себе будет ссылаться только на локальную фиксацию / слияние - несколько раз я забывал, что при сбросе и в конечном итоге "ваш репозиторий X фиксирует впереди ...", когда я полностью намеревался уничтожить ВСЕ изменения / коммиты и вернитесь в удаленную ветку.

8 голосов
/ 20 августа 2009

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

git reset --hard HEAD

Тогда вы сможете переключать ветки.

6 голосов
/ 24 апреля 2018

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

git reset --hard HEAD
git clean -d -f
3 голосов
/ 02 марта 2018

переключение на новую ветку с потерей изменений:

git checkout -b YOUR_NEW_BRANCH_NAME --force

переключение на существующую ветку с потерей изменений:

git checkout YOUR_BRANCH --force
2 голосов
/ 28 февраля 2019

Если вы хотите сохранить изменения и изменить ветку в одной строке, команда

git stash && git checkout <branch_name> && git stash pop
2 голосов
/ 12 марта 2018

Закройте терминал, удалите папку, в которой находится ваш проект, затем снова клонируйте ваш проект и вуаля.

...