Я работал над основной веткой, внес некоторые изменения и затем спрятал их. Теперь мой мастер в HEAD.
Но теперь я хочу получить эти изменения, но в новую ветвь, которая ветвится из версии HEAD главной ветки.
Как мне это сделать?
Стандартная процедура не работает?
git stash save
git branch xxx HEAD
git checkout xxx
git stash pop
Короче:
git stash
git checkout -b xxx
Так как вы уже спрятали свои изменения, все, что вам нужно, это одна строка:
git stash branch <branchname> [<stash>]
Из документов (https://www.kernel.org/pub/software/scm/git/docs/git-stash.html):
Создает и извлекает новую ветку с именем <<em> branchname >, начиная с коммита, при котором изначально был создан <<em> stash >, применяет изменения, записанные в <<em> stash > к новому рабочему дереву и индексу. Если это удается, и <<em> stash > является ссылкой на форму stash @ {<<em> revision >}, он удаляет <<em> stash >. Если <<em> stash > не указан, применяется последний. Это полезно, если ветка, в которой вы запустили git stash save, изменилась настолько, что git stash не удалось выполнить из-за конфликтов. Поскольку хранилище применяется поверх коммита, который был HEAD во время запуска git stash, он восстанавливает исходное сохраненное состояние без конфликтов.
Создает и извлекает новую ветку с именем <<em> branchname >, начиная с коммита, при котором изначально был создан <<em> stash >, применяет изменения, записанные в <<em> stash > к новому рабочему дереву и индексу. Если это удается, и <<em> stash > является ссылкой на форму stash @ {<<em> revision >}, он удаляет <<em> stash >. Если <<em> stash > не указан, применяется последний.
Это полезно, если ветка, в которой вы запустили git stash save, изменилась настолько, что git stash не удалось выполнить из-за конфликтов. Поскольку хранилище применяется поверх коммита, который был HEAD во время запуска git stash, он восстанавливает исходное сохраненное состояние без конфликтов.