2011-12-22 18 views
5

Supongamos que tengo una rama de línea principal y una rama de entidad. He fusionado la rama principal en la rama de características muchas veces, pero solo he tenido algunos conflictos de fusión muy pequeños. Quiero limpiar el historial para que solo haya una fusión al final. ¿Cuál es el mejor método para hacer esto?Combinación de fusiones en una sola combinación

+1

Cuando dice limpiar la historia, tiene que ser más específico. Si desea eliminar las fusiones de la línea principal en función, debe decidir cómo quiere que se vea la rama de características con esas fusiones eliminadas. Por ejemplo, si algún trabajo en la rama de características depende de los cambios realizados en la línea principal (y posteriormente se fusionó en la rama de características), eliminar las fusiones hará que la rama de características ya no se compile porque depende del código que se eliminó. –

+0

@KevinBallard: ese es un punto válido. En algunos casos, es posible que desee cambiar la rama hacia arriba. Aunque no estoy demasiado preocupado por esta pregunta, solo quiero asegurarme de que la sucursal solo vuelva a fusionarse una vez. – Casebash

Respuesta

1

¿Has mirado en git rebase?

git co -b temp_feature feature 
git rebase master 

Esto debería ignorar las fusiones, pero tendrá que volver a resolver los conflictos. También crea la rama temp_feature para facilitar el regreso pero lo mismo se puede lograr con el reflog.

(Respuesta equivocada continuación: esto creará única confirmación, ni una sola de combinación: - /)

creo que lo más sencillo es hacer lo siguiente:

git co master 
git merge --squash feature 

Esto creará única confirmación de toda la rama de características. Si no desea mantener la rama de la característica hacer:

git branch -D feature 
1

Usted puede hacer un rebase interactivo para lograr esto, pero sólo debería hacerlo si aún no compartían esa historia con nadie más. Lo que esto significa en la práctica es que solo debe hacer esto si no ha realizado un git push en un repositorio compartido.

1

Suena como si quisieras seleccionar las confirmaciones sin fusión para la rama de características en la rama de la función de limpieza, y finalmente fusionar la rama de la función de limpieza con la última máster (cualquiera que sea). Puedes usar rebase para acelerar parte de ese cherrypicking, que desafortunadamente no sé de una buena manera de hacerlo en un santiamén, ya que esto no es algo que hago muy a menudo. Sería útil si tienes una interfaz gráfica de usuario que te permite seleccionar varias confirmaciones para que sean seleccionadas a la vez.

Editar: Esta sería una solución más concreta: How to cherry pick a range of commits and merge into another branch