Ответы:
Похоже, все, что вам нужно, это следующее:
git stash
git checkout branch123
git stash apply
Тогда вы должны вернуться в свою собственную ветку, не касаясь главной ветви.
stashсохраняет локальные модификации, а затем stash applyвозвращает их обратно.
git reset --hard HEADи вы вернулись к последнему коммиту, который вы сделали в своей основной ветке.
Принятый ответ является наиболее полным, но есть особый случай, когда вы можете упростить. Если файлы, которые вы изменили в рабочем каталоге, идентичны в обоих, masterи branch123вы можете просто сделать
git checkout branch123
Не нужно ничего прятать, поскольку по умолчанию поведение checkoutНЕ перезаписывает измененные файлы в вашем рабочем каталоге, поэтому вы ничего не потеряете. (Это было на самом деле упомянуто в комментариях сначала Каскабель)
Как уже упоминали другие люди в комментариях, если вы branch123еще не существует, вы можете сделать
git checkout -b branch123
На основании того, что я нашел здесь .
git checkout -b newbranch
masterи branch123. Смотрите мой отредактированный ответ.
git stash это то, что вам нужно.
полное объяснение можно найти в Git-Tools-Stashing
Так как можно создать новую ветку, но невозможно извлечь существующую ветку, пока файлы извлечены, я обнаружил следующий прием, использующий временную ветку:
Этот сценарий работает по крайней мере с плагином VS 2015 Git, но, скорее всего, будет работать с любым инструментом Git.
РЕДАКТИРОВАТЬ: я обнаружил, что вам придется выполнить rebase (git rebase --onto) временную ветвь перед выполнением слияния. В противном случае изменения в основной записи будут включены в слияние. Дополнительный шаг 3.5 выше. Подробнее о ребазе читайте здесь: https://git-scm.com/book/en/v2/Git-Branching-Rebasing.