2012-03-29 14 views
9

Tengo una rama "maestra" y varias ramas temáticas. Supongamos que la rama maestra se utiliza principalmente como candidato de lanzamiento y no ocurre ningún trabajo de desarrollo en esta rama.¿Reasignación después de la fusión de squash?

Las ramas del tema son varias y son compartidas por el equipo. Algunas de las sucursales tienen más de un desarrollador trabajando en ellas. Todas las ramas de temas se actualizan periódicamente desde la rama principal.

Para limpiar el historial en la rama 'master', hice una 'git merge --squash' al fusionar código de tema a ramas principales. Esto funcionó perfectamente bien.

Ahora, cuando las ramas de tema se vuelven a configurar, las confirmaciones se duplican. ¿Hay alguna manera de limpiar las confirmaciones en las ramas de tema una vez que la 'combinación de git --squash' ha sido exitosa?

+0

No funcionará perfectamente bien en el caso de [archivos eliminados] (http://stackoverflow.com/a/14343784/281545). Tal vez no sea el camino a seguir - vea [aquí] (http://stackoverflow.com/questions/1464642/git-merge-squash-repeatedly) –

Respuesta

7

supongamos que tiene el siguiente escenario:

A - B - C (master) 
\ 
    D - E (topic) 

Si fusiona tema en principal con --squash obtendrá algo así como

A - B - C - F (master) 
\ 
    D - E (topic) 

Donde F contiene todos los cambios de D y E Volver a basar el tema en el maestro no tiene sentido ya que la rama del tema ya está en el maestro (a través de F). En lugar de volver a basar, puede mover la rama de tema a F, p.

git checkout master 
git branch -f topic F 

que produce:

A - B - C - F (master/topic) 

único que tiene que hacer ahora es empujar hacia arriba la rama tema movido:

git push -f origin topic 
+0

¡Gracias! Eso hace exactamente lo que necesitaba. – mustard

+0

Tenga cuidado con squash - F puede contener archivos que eliminó en su rama de temas, consulte http://stackoverflow.com/a/14343784/281545 –

3

que solía hacer lo mismo que Magnus acaba con un par más comandos:

git checkout master 
git merge --squash topic 
git commit -m "Add topic feature" 

git branch -D topic 
git checkout -b topic 

git push -f origin topic 
Cuestiones relacionadas