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

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

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

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

9 ответов


вам нужно чистое состояние для изменения ветвей. Проверка филиала будет разрешена только в том случае, если она не повлияет на "грязные файлы" (as Чарльз Бэйли замечания в комментариях).

в противном случае, вы должны либо:

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

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

git checkout -- <file>
git checkout branch

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

git stash save
git checkout branch
git stash pop

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

git stash save
git checkout branch
// do something
git checkout oldbranch
git stash pop

следует,

$: git checkout -f

$: git checkout next_branch

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

git reset --hard origin/HEAD

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


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

git reset --hard HEAD

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


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

git reset --hard HEAD
git clean -d -f

переход на новую ветку теряет изменения:

git checkout -b YOUR_NEW_BRANCH_NAME --force

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

git checkout YOUR_BRANCH --force

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