2012-06-11 11 views
8

f'I tienen la siguiente:origen git cambio de una rama (rebase)

A---B---C-----D-- branch dev 
    \--C'-E-/  branch test 

lo hice mal: C y C' son casi las mismas confirmaciones, que tendría más sentido si podía hacer rama prueba de arranque en C, en lugar de B.

¿Cómo podría hacer eso ?, supongo que rebase, pero no estoy seguro de cómo usarlo, THX

edición: no estaba claro lo que me gustaría:

A---B---C-----D-- branch dev 
     \-E-/  branch test 

o

A - B - D - E - D si no es posible

Respuesta

8

Se podría rebasar en la parte superior de una rama temporal (hecho de C)
Ver git rebase y Rebasing, más git branch.

git branch tmp C 
git checkout test 

# rebase the current branch (test) on top of tmp 
git rebase tmp 

git branch -d tmp 

que debe darle:

A---B---C-----D--  branch dev 
     \--C''-E'-/  branch test 

me queda C '(aquí como C '') debido a que C' no es exactamente la misma que C.
Pero como ams comentarios, si necesita C' se ha ido, que lo haría

git rebase -i tmp 

Eso le conseguiría un interactiva rebase, permitiendo que C' se elimine por completo, reproduciendo solo E en la parte superior de C.

+0

pero necesito quitar C', entonces, mantener simplemente E en la otra rama, que es solo el compromiso importante –

+0

No estoy seguro de por qué @VonC ha dejado 'C''' allí. Según lo entiendo, 'C'' debería haberse eliminado por completo. Si no es así, entonces puedes usar 'git rebase -i tmp' y borrar la línea con' C'' en él. – ams

+1

Además, al hacer esta rebase, la rama 'test' se vería mejor, pero la versión anterior continuará en la historia de' D', no es que a usted le importe eso. Si 'dev' es una rama local que nadie más ha visto todavía, también puedes' git reset' hacerlo a 'C' y volver a hacer la fusión. – ams

6

Puede reajustar simplemente la pieza que desee en C:

A---B---C-----D-- branch dev 
    \ 
     C'-E--  branch test 

# git rebase --onto [new base] [starting after this commit] [ending at this commit] 
git rebase --onto C C' E 

A---B---C-----D-- branch dev 
     \ 
      E--  branch test 

Es el mismo concepto que elijan el, excepto los test puntero rama se mueve junto con las confirmaciones rebasada.

(Tenga en cuenta que el C 'cometer será inalcanzable después de que el rebase, pero se puede volver a ella con git reflog.)

+0

Necesito estar en la prueba de rama para hacer eso? Ya fusioné la prueba del dev –

+0

para el indicador '--on', no importa en qué rama estás, porque estás diciendo exactamente qué hacer:" Comenzando allí, mueve todo hasta eso en este ". No estoy seguro de lo que quiere decir con "prueba fusionada de dev". – ellotheth

+0

E se une a D, D es una combinación entre las 2 ramas –