Если вы еще не сделали коммит, достаточно только (1: ветка) и (3: извлечение).
Или в одной команде: git checkout -b newBranch
Как уже упоминалось в справочной странице git reset
:
$ git branch topic/wip # (1)
$ git reset --hard HEAD~3 # (2) NOTE: use $git reset --soft HEAD~3 (explanation below)
$ git checkout topic/wip # (3)
- Вы сделали несколько коммитов, но понимаете, что они были преждевременны в ветке "
master
". Вы хотите продолжить полировать их в ветке темы, поэтому создайте ветку "topic/wip
" из текущей HEAD
.
- Перемотайте ветку
master
, чтобы избавиться от этих трех коммитов.
- Переключитесь на ветку "
topic/wip
" и продолжайте работать.
Примечание: из-за "разрушительного" эффекта команды git reset --hard
(она сбрасывает индекс и рабочее дерево. Любые изменения отслеживаемых файлов в рабочем дереве, поскольку <commit>
отбрасываются), я бы предпочел пойти с :
$ git reset --soft HEAD~3 # (2)
Это гарантирует, что я не потеряю приватный файл (не добавленный в индекс).
Опция --soft
не будет касаться ни файла индекса, ни рабочего дерева (но сбрасывает заголовок на <commit>
, как это делают все режимы).