git: Как переместить последние N коммитов, сделанные мастеру, в собственную ветку?
У меня есть хранилище, где я работал master
В последний раз ветка добавила около 10 или около того коммитов, которые, как я сейчас хочу, были в другой ветке, так как они описывают работу, которую я сейчас вижу, экспериментальную (я все еще изучаю хорошие практики git). По сути, я хотел бы, чтобы эти последние 10 коммитов начинались с точки master
сформировать собственную ветку, чтобы я мог иметь master
только для коммитов "release"/"stable".
Что у меня сейчас, самое правое X
последний коммит действительно хорош для релиза:
b--b (feature B)
/
X--X--X--Z--Z--Z--Z--Z--Z (master)
\
a--a--a (feature A)
Вы можете видеть, что оба X
а также Z
находятся на хозяине, в то время как я хочу коммиты отмеченные Z
(моя "функция Z" работа), чтобы лежать на своей собственной ветви функции, так что совет master is at the rightmost
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" на их собственную ветку?
3 ответа
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