2010-11-08 28 views
18

He realizado varios cambios en la rama principal de mi repositorio de git, y los he relanzado (aunque soy el único que funciona con estos). Lo que quiero hacer es eliminar estos últimos commits, retrotraer a master antes de los cometidos arrancados, volver a aplicar los commits en la rama de desarrollo y luego volver a fusionar en master.Moviendo confirmaciones de una rama a otra

Esto es lo que mi repositorio ve ahora:

a [master] [remotes/origin/master] 
| 
b 
| 
c 
| 
d (merge branch 'develop') 
|\ 
| \ 
| e [develop] [remotes/origin/develop] 
| | 
q f 
| | 
r g 

Y esto es lo que quiero que se vea como:

Z [master] [remotes/origin/master] 
|\ 
| \ 
| A 
| | 
| B 
| | 
d C 
|\ | 
| \| 
| e [develop] [remotes/origin/develop] 
| | 
q f 
| | 
r g 

¿Puedo conseguir un poco de ayuda en esto? Estoy pensando que este es un trabajo para rebase, pero no estoy muy seguro de cómo hacerlo realidad.

+5

Sus diagramas me confundieron para un poco - en el futuro, es posible que desee etiquetar sus compromisos en orden cronológico en lugar de invertir. – Cascabel

Respuesta

27

aquí están:

# move cba onto e 
git branch foo 
git rebase --onto <SHA1-e> <SHA1-d> foo 

# rewind master to d 
git checkout master 
git reset --hard <SHA1-d> 

# merge 
git merge foo 

Es posible que desee elegir un nombre más descriptivo que la rama foo, ya que va a ser registrada en la fusión mensaje de confirmación para Z.

+0

Gracias, eso es lo que necesitaba. Me estaba quedando a mitad de camino allí, pero el reinicio era lo que me estaba perdiendo. – Doug

Cuestiones relacionadas