Если вы не зафиксировали изменения
Если ваши изменения совместимы с другой веткой
Это случай из вопроса, потому что OP хочет зафиксировать в новой ветке, а также применяется, если ваши изменения совместимы с целевой ветвью, не вызывая перезаписи.
Как и в принятом ответе Джона Броди, вы можете просто проверить новую ветку и зафиксировать работу:
git checkout -b branch_name
git add <files>
git commit -m "message"
Если ваши изменения несовместимы с другой веткой
Если вы получили сообщение об ошибке:
error: Your local changes to the following files would be overwritten by checkout:
...
Please commit your changes or stash them before you switch branches
Затем вы можете спрятать свою работу, создать новую ветку, затем внести изменения в свой тайник и разрешить конфликты:
git stash
git checkout -b branch_name
git stash pop
Все будет так, как если бы вы внесли эти изменения после создания новой ветки. Затем вы можете зафиксировать как обычно:
git add <files>
git commit -m "message"
Если вы зафиксировали изменения
Если вы хотите сохранить коммиты в исходной ветке
См. Ответ Карла Норума о сборе вишен, который в данном случае является правильным инструментом:
git checkout <target name>
git cherry-pick <original branch>
Если вы не хотите сохранять коммиты в исходной ветке
См. Ответ joeytwiddle на этот потенциальный дубликат . При необходимости выполните любой из вышеуказанных шагов, затем откатите исходную ветку:
git branch -f <original branch> <earlier commit id>
Если вы отправили свои изменения на общий удаленный компьютер, например GitHub, вам не следует пытаться выполнить этот откат, если вы не знаете, что делаете.