2010-12-30 10 views
10

Tengo un repositorio en el que he estado trabajando en la rama master agregando unos 10 commits que ahora deseo en otra rama, ya que describen el trabajo que ahora veo como experimental (todavía estoy aprendiendo buenas prácticas de git) . Básicamente, me gustaría que estos últimos 10 commits comiencen desde un punto en master para formar mi propia rama, de forma que pueda tener master para commit de "release"/"stable" solamente.git: ¿Cómo mover las últimas N confirmaciones hechas para dominar, en su propia rama?

Lo que tengo ahora, más a la derecha X es la última confirmación realmente bueno para la liberación:

 b--b (feature B) 
    /  
X--X--X--Z--Z--Z--Z--Z--Z (master) 
    \ 
    a--a--a (feature A) 

Se puede ver que tanto X y Z son el maestro, mientras que lo que quiero es comete marcado por Z (mi "Característica Z" trabajo) para mentir en su propia rama de características, por lo que la punta de master is at the rightmost X`. Para ilustrar la gráfica deseada:

 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) 

De esa manera voy a tener mis master reservados para la materia de calidad, que se fusionan en A, B y Z características según sea necesario.

Entonces, ¿cómo muevo las confirmaciones "Z" en su propia rama?

+0

posible duplicado de [Mover compromete desde el maestro a una rama usando git] (http: // stackoverflow .com/questions/37 19068/move-commits-from-master-on-a-branch-using-git) –

Respuesta

12
git checkout master 
git branch feature-Z 
git reset <commit_id> 

donde commit_id es un identificador de la última confirmación X antes de b ramas desactivadas.

+7

Probablemente quieras 'git reset --hard'. Y si hay modificaciones que no se han registrado, arroje un 'git stash' antes y un' git stash pop' después. –

+0

De acuerdo, fundamentalmente. Como él no dijo/solicitó nada sobre el inicio/deseo de trabajar en el estado del árbol, eché la solución de mecanografía mínima que hizo lo que pidió. Parece que sabe lo suficiente como para inventarse los detalles por sí mismo. Subí tu comentario para ayudar a mantenerlo visible para otros que no lo harían. –

2

simplemente cambiar el nombre de maestro y empezar un nuevo maestro en los últimos X:

git checkout master; git branch -m feature; git checkout -b master HEAD~6

+0

Una desventaja de su propuesta es que ahora la función está rastreando origen/maestro. –

5

Para completar, la respuesta está aquí - http://git-scm.com/docs/git-reset - buscar el texto "Deshacer una confirmación, por lo que es una rama tema "- el ejemplo muestra lo que el último 3 comete una rama y restablecimiento maestro al cometer anterior a esos 3 se compromete:

$ 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 
+0

El enlace kernel.org ha ido desde 404, pero 'man git-rebase' dará lo último para su versión de git. –

Cuestiones relacionadas