Я работал над веткой git и был готов зафиксировать свои изменения, поэтому я сделал коммит с полезным сообщением коммита. Затем я рассеянно внес небольшие изменения в код, которые не стоит хранить. Теперь я хочу сменить ветку, но Git дает мне,
ошибка: у вас есть локальные изменения на «X»; не может переключать ветви.
Могу ли я сменить ветку без коммитов? Если так, как я могу настроить это? Если нет, как мне выйти из этой проблемы? Я хочу игнорировать незначительные изменения без фиксации и просто менять ветки.
git
branch
git-checkout
Дэниел Фаррелл
источник
источник
error: You have local changes to '<filename>'; cannot switch branches.
и ветвь не изменится. Вы можете сделать это,git checkout -m <branch-name>
чтобы объединить конфликты и оформить заказ в ветке и разрешить конфликты самостоятельно илиgit checkout -f <branch-name>
игнорировать изменения.Ответы:
Вам нужно чистое состояние, чтобы сменить ветки. Проверка ветки будет разрешена только в том случае, если она не влияет на «грязные файлы» (как замечает Чарльз Бэйли в комментариях).
В противном случае вы должны либо:
reset --hard HEAD
(если вы не против потерять эти незначительные изменения) илиcheckout -f
(При переключении веток продолжайте работу, даже если индекс или рабочее дерево отличается от HEAD. Это используется для исключения локальных изменений.)Или, совсем недавно:
git switch
:git switch -f <branch-name>
(
-f
сокращение от--force
, что является псевдонимом для--discard-changes
)Это отличается от того
git switch -m <branch-name>
, что запускает трехстороннее слияние между текущей веткой, содержимым вашего рабочего дерева и новой веткой: готово: таким образом вы не потеряете свою работу в процессе.источник
Если вы хотите отменить изменения,
Если вы хотите сохранить изменения,
источник
git stash save
(когда в рабочей ветке Y) затемgit checkout branchX
что-то делатьgit add/commit -m
и т. Д.git checkout branchY
Иgit stash pop
вернуть тайникgit stash save
теперь не рекомендуется в пользуgit stash push
ну, это должно быть
источник
git stash
будет по умолчаниюgit stash save
Следить,
источник
Обратите внимание, что если вы объединили удаленные ветви или имеете локальные коммиты и хотите вернуться к удаленному HEAD, вы должны сделать:
HEAD
один будет ссылаться только на локальную фиксацию / слияние - несколько раз я забывал, что при сбросе и в конечном итоге "ваш репозиторий - это X коммитов впереди ...", когда я полностью намеревался уничтожить ВСЕ изменения / коммиты и вернуться в удаленную ветку ,источник
Если вы внесли изменения в файлы, которые Git также должен изменить при переключении веток, это не позволит вам. Чтобы отменить рабочие изменения, используйте:
Тогда вы сможете переключаться между филиалами.
источник
Ни один из этих ответов не помог мне, потому что у меня все еще были неотслеживаемые файлы даже после сброса и тайника. Я должен был сделать:
источник
переход на новую ветку теряет изменения:
переключение на существующую ветку с потерей изменений:
источник
Простой ответ:
это заставить оформить ветку
Принудительное извлечение ветки говорит git отбросить все изменения, которые вы сделали в текущей ветке, и извлеките желаемое.
или в случае, если вы проверяете коммит
Ответ на этот вопрос - « Нет ». В буквальном смысле философия Git заключается в том, что вы отслеживаете все изменения и каждый узел (т. Е. Коммит) должен быть в курсе последних внесенных вами изменений, если только вы не сделал новый коммит конечно.
Вы решили сохранить изменения?
Затем спрятать их, используя
а затем, чтобы распаковать изменения в нужную ветку, используйте
который применяет ваши изменения, но также сохраняет их в очереди хранения. Если вы не хотите хранить их в стеке, скопируйте их, используя
Это эквивалентно,
apply
а затемdrop
источник
Закройте терминал, удалите папку, в которой находится ваш проект, затем снова клонируйте ваш проект и вуаля.
источник
reset --hard
!Если вы хотите сохранить изменения и изменить ветку в одной строке
источник
Переместить незафиксированные изменения в новую ветку
Я создал
.gitconfig
псевдоним для этого:Чтобы изменить на
new-branch-name
, используйте:И любые не зафиксированные изменения файла и индекса будут сохранены.
источник
git checkout -f your_branch_name
Если у вас есть проблемы с отменой изменений:
если вы хотите удалить неотслеживаемые каталоги и файлы:
источник
Переключиться на другую ветку без фиксации изменений, когда git stash не работает. Вы можете использовать следующую команду:
git checkout -f имя-филиала
источник