2009-05-06 9 views
8

Necesito insertar una confirmación en la rama principal de mi repositorio de git preservando las fusiones y confirmaciones subsiguientes.¿Cómo inserto un commit usando git?

actualmente tienen algo como esto

A--B--C--D--E--F  master 
     \  \ 
     G--H I--J branches 

y la necesidad de insertar un K cometer tal que se convierte en la nueva estructura

A--B--K    master 
    \ 
    C--D--E--F  new branch 
     \  \ 
     G--H I--J old branches 

Ni siquiera estoy seguro si esto es posible. ¿Algunas ideas?

Respuesta

10
git checkout master 
git branch new_branch # copy current branch master to new_branch 
git reset --hard B # now master points to B 
(hack, hack, hack) 
git commit -m K  # K on B in master 
+1

Esto da como resultado la estructura requerida, ¡gracias! –

2

Cambie el nombre de la rama "principal" a "nueva rama". Luego, revise la confirmación B, inicie una nueva rama llamada "maestra" desde allí y realice los cambios. Algo como lo siguiente debería hacerlo (no probado).

git branch -m master new_branch 
git branch master B 
git checkout master 
+0

Gracias por su respuesta. Esto hace que commit sea un miembro de "nueva sucursal" y no "maestro". La historia del maestro se convierte en "B - K" en lugar de "A - B - K". Esta misma estructura se puede lograr (con diferentes nombres de sucursales) simplemente ramificándose desde B y cometiendo K. –

+0

@ Jason. Sé que tengo 4 años de retraso para la fiesta aquí, y su cuenta parece haberse perdido; pero commit A sería un miembro de "new_branch" y "master". Es un árbol, y muchas ramas pueden compartir los mismos antepasados. Por supuesto, se puede anotar de una forma u otra (por ejemplo, 'git log --graph --oneline --all'), pero eso es solo una notación -' git log master' y 'git log new_branch' mostrarán ambos tiene A. También es cierto de su sugerencia para crear esta misma estructura. – 13ren

0
# git checkout -b new-master B 

Ahora realice los cambios de K, cometerlos y listo, ahí está la estructura que desea. :)