В локальной ветви не нужно фиксировать изменения, но нужно переключиться на другую ветку

Я работаю над филиалом на и функция/задача не выполнена. Тогда мне нужно переключиться на другую ветку B для быстрого решения. Когда я пытаюсь включить другую ветку, Git заставляет меня сохранять локальные изменения, иначе я потеряю все локальные изменения.

Мне нужно зафиксировать мой неполный код. Есть ли способ переключаться между несколькими ветвями без фиксации и потери кода? Или есть лучший способ справиться с ситуацией?

2 ответов


один вариант, как mipadi показывает, просто использовать git stash.

другой вариант - просто зафиксировать текущую незавершенную работу, переключить ветви, а затем, когда вы будете готовы переключиться обратно, выполните смешанный сброс к предыдущей фиксации:

# While working on "feature" branch,
# you suddenly need to go work on a hotfix:
$ git commit --all --message "Backup my feature work"
$ git checkout -b hotfix master

# You did your hotfix, and are ready to go back to feature
$ git checkout feature
$ git reset head^

git reset head^ выполнит смешанный сброс до фиксации до фиксации резервной копии, и все изменения, внесенные в фиксацию резервной копии, будут восстановлены в вашей рабочей копии. От официальная документация ядра Linux для git reset (выделено мной):

сбрасывает индекс, но не рабочее дерево (т. е. измененные файлы сохраняются, но не помечены для фиксации) и сообщает, что не была обновлена. Это действие по умолчанию.


можно использовать git stash, который сохранит ваши изменения без создания фиксации.1

во-первых, притон изменения:

$ git stash

затем переключитесь на другую ветку:

$ git checkout branch-B

когда вы читаете, вернитесь в исходное филиала и unstash изменения:

$ git checkout branch-A
$ git stash pop

см. документацию, связанную выше для получения более подробной информации и сведений о дополнительном использовании случаи.


1 технически это создает фиксацию, но git stash использует некоторую магию, так что вы на самом деле посмотреть фиксация, и инструменты Git знают, как правильно обращаться с этими псевдо-фиксациями.