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 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
закройте терминал, удалите папку, в которой находится ваш проект, затем снова клонируйте свой проект и вуаля.