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

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

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

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

 Jeremy Wall21 авг. 2009 г., 05:16
Я считаю, что это происходит только тогда, когда они внесены изменения для фиксации, но не зафиксированы? git checkout прекрасно работает для смены веток, если вы еще не создали файлы с помощью git add или чего-либо подобного.
 Howiecamp30 окт. 2016 г., 01:01
@boyfarrell Вы можете использовать 'Git stash', чтобы временно сохранить изменения без фиксации.
 Daniel Farrell21 авг. 2009 г., 11:25
Привет, Джереми, что ты имеешь в виду под «постановкой»? Принуждение пользователя к фиксации файла перед изменениями не выглядит хорошим рабочим процессом. Например, если я нахожусь в главном репозитории и быстро хочу проверить что-то в ветке. Сначала я должен передать код мастеру, даже если он наполовину написан! Вы говорите, что действительно, в этой ситуации должна быть возможность оформить отделение?
 user56845809 янв. 2018 г., 18:51

Ответы на вопрос(10)

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

 Ahmed Nour Jamal El-Din29 янв. 2019 г., 03:17
git не предназначен для того, чтобы заставить вас удалить проект и снова клонировать! если вы хотите получить последнюю версию от источника, вы простоreset --hard!

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

git reset --hard origin/HEAD

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

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

git stash && git checkout <branch_name> && git stash pop

Следить,

$: git checkout -f

$: git checkout next_branch
Решение Вопроса

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

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

копить ваше текущее изменение илиreset --hard HEAD (если вы не против потерять эти незначительные изменения) илиcheckout -f (При переключении веток продолжайте работу, даже если индекс или рабочее дерево отличается от HEAD. Это используется для исключения локальных изменений.)
 nehemiah14 февр. 2017 г., 23:23
Вот одна замечательная вещь, которую Git совершенно ошибся, нарушив базовое определение ветви. В отличие от git ветка означает два совершенно разных рабочих пространства, разветвленных из репозитория.
 nologo08 июл. 2015 г., 03:12
Благодарю. проверка -f была то, что мне было нужно. я сделал git reset --hard git clean -f git checkout mybranch -f
 CB Bailey20 авг. 2009 г., 13:46
«Вам нужно чистое состояние, чтобы сменить ветку». Истинно, только если изменение ветки влияет на «грязные файлы».
 Venkat D.13 окт. 2011 г., 03:05
Для метода stash я набрал «git stash save», «git checkout otherbranch», а затем «git stash pop».
 Senthil A Kumar28 нояб. 2011 г., 07:50
В настоящее время я не вижу этого сообщения об ошибке, и изменения, которые я сделал в одной ветви, отображаются в другой, когда я делаю "git status". что-то изменилось?

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

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

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

git stash save
git checkout branch
// do something
git checkout oldbranch
git stash pop
 Govind Kumar24 мая 2017 г., 14:45
Спасибо, это очень полезно для меня
 Master-Chief08 авг. 2016 г., 16:19
Должно быть записаноgit stash по умолчанию будетgit stash save
 Aditya Mittal19 янв. 2016 г., 20:07
Да, stash является глобальным, а не специфичным для ветви. Если я переключу pop после переключения ветви, я получу тот же самый stash, что и в другой ветви.

git checkout -b YOUR_NEW_BRANCH_NAME --force

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

git checkout YOUR_BRANCH --force

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

git checkout -- <file>
git checkout branch

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

git stash save
git checkout branch
git stash pop
 Argento21 окт. 2018 г., 17:45
Обратите внимание, чтоgit stash save в настоящее время устарела в пользуgit stash push
 Highmastdon09 нояб. 2012 г., 10:36
Действительно, что говорит Ромерун (чтобы быть полным):git stash save (когда в рабочей ветке Y) тогдаgit checkout branchX сделай что-нибудьgit add/commit -m и т.п.git checkout branchY а такжеgit stash pop вернуть тайник
 Ben Klein06 окт. 2015 г., 19:02
Может быть, так. У меня есть ситуация, когда я хочу сделать то, что говорит ответ, если я правильно понимаю: прятать изменения, переключаться с Y на X, затем извлекать изменения и фиксировать их на X.

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

git reset --hard HEAD

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

Ваш ответ на вопрос