Ответ 1
git checkout master
git branch feature-Z
git reset <commit_id>
где commit_id - это идентификатор последнего коммита X до того, как b отключается.
У меня есть репозиторий, в котором я работал над веткой master
, когда в последний раз добавлял около 10 коммитов, которые, как я теперь хотел, были в другой ветке, поскольку они описывают работу, которую я сейчас считаю экспериментальной (я все еще изучаю хорошие практики Git).
В свете этого соображения я хотел бы, чтобы последние 10 коммитов, так сказать, формировали свою собственную ветвь, чтобы я мог очистить master
и зарезервировать только для коммитов "release"/"stable".
Чтобы проиллюстрировать, что у меня есть:
b--b (feature B)
/
X--X--X--Z--Z--Z--Z--Z--Z (master)
\
a--a--a (feature A)
Вы можете видеть, что все коммиты, отмеченные X
и Z
, находятся на ветке master
, тогда как я хочу, чтобы коммиты, отмеченные Z
(теперь рассматриваемая экспериментальная работа "Feature Z"), лежали на их собственной ветки и master
заканчивая самым правым X
. Для иллюстрации необходим график:
b--b (feature B)
/
X--X--X (master)
\ \
\ Z--Z--Z--Z--Z--Z (feature Z - the new branch I want)
\
a--a--a (feature A)
Таким образом, мой master
будет зарезервирован для выпусков и других стабильных коммитов, с возможностью объединения функций A, B и Z по мере необходимости.
Так как мне переместить коммиты "Z" на их собственную ветку?
git checkout master
git branch feature-Z
git reset <commit_id>
где commit_id - это идентификатор последнего коммита X до того, как b отключается.
Для полноты ответа здесь - http://git-scm.com/docs/git-reset - поиск текста "Отменить фиксацию, сделав ее ветвью темы" - в примере показано, что последние 3 фиксируют ветвь и восстанавливают мастер до фиксации, предшествующей этим 3 коммитам:
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 3 commits.
#
nothing to commit (working directory clean)
$ git branch topic/wip
$ git reset --hard HEAD~3
$ git checkout topic/wip
Switched to branch topic/wip
Просто переименуйте мастер и запустите новый мастер на последнем X:
git checkout master; git branch -m feature; git checkout -b master HEAD~6
Создать и оформить заказ в нужной новой ветке
Принудительная ветвь мастера N фиксирует назад (в вашем случае 10)
git checkout -b feature-z
git branch -f master HEAD~10