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 rightmostX`. Для иллюстрации желаемого графика:

        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
Другие вопросы по тегам