2011-08-27 11 views
11

Supongamos que necesito realizar una refacturación de longitud promedio (varios días).¿Cómo aplastar mis cambios en un único compromiso de resultados y elegir la rama principal?

Creo "mybranch" de master, hago el trabajo, a veces realizo fusiones de master a mybranch (se supone que otros miembros del equipo continúan el trabajo, y probablemente tendré que obtener sus cambios). Y después de un tiempo, estoy listo para fusionar mis cambios con el maestro.

¿Podré aplastar solo mis cambios (excluyendo los conjuntos de cambios con fusiones del maestro, ya que no son míos) y seleccionar un solo compromiso de mis trabajos en el maestro? ¿Es posible hacer un escenario?

Respuesta

7

Yep. Puede confirmarlo con un pequeño repositorio de pruebas. Sólo hacer:

git rebase --interactive master mybranch 

y selecciona squash para todas las líneas excepto la primera. A continuación, simplemente finalice la compra master y realice una combinación de avance rápido normal de mybranch.

+0

Oh, aún será un avance rápido? ¿Sin necesidad de recogerlo? "para todas las líneas excepto la primera" --- ¿qué es "primero" en este caso?Y podría aplastar todo, excepto las fusiones (supongo que haré varias fusiones del maestro en el proceso del trabajo) – zerkms

+0

Correcto. Rebase siempre produce un historial de envío rápido. Básicamente, resuelve todos los conflictos antes de la fusión en lugar de después. –

+0

ok, genial, gracias – zerkms

4

Después de reajuste, no habrá ninguna referencia sobre esas confirmaciones en las anteriores "MyBranch"

lo que haré y podría estar más de seguridad es que

git checkout mybranch 

crear una rama (en realidad es una rama temporal con el fin de rebase)

git checkout -b movingToMaster 

Trate de rebase el movingTomaster a master

git rebase -i master 

Un editor se le pedirá a cabo pidiéndole que practican deben ser recogidos, o aplastado o editar ...

Editar archivos que, en su caso, la primera línea deben mantener siguen siendo los mismos y el otro la línea debe cambiar "pick" en "squash", puede modificar el mensaje de confirmación si lo desea. Guárdelo después de realizar cambios suficientes en ese archivo.

decir

pick 0a81405 Bug Fix 1 
pick 91be655 Bug Fix 2 
pick 1200fc7 Bug Fix 3 
pick 1211fb7 Bug Fix 4 
pick ba77fdf Bug Fix 5 

Cambiar para

pick 0a81405 Bug Fix 1 
squash 91be655 Bug Fix 2 
squash 1200fc7 Bug Fix 3 
squash 1211fb7 Bug Fix 4 
squash ba77fdf Bug Fix 5 

guardarlo. Entonces

git checkout master 

Mueva su rama master-movingTomaster rama mediante el uso de Fast fusionar hacia adelante

git merge movingTomaster 

Nota: será ningún daño ya que sólo es una combinación de avance rápido y no el desorden de su historia.

eliminar su rama movingTomaster si quieres

git branch -D movingTomaster 
+0

Sí, te tengo. Gracias. Pero no puede obtener la línea "y mover su rama principal a la rama movingTomaster" – zerkms

+0

@zerkms: en ese punto, su rama maestra aún no tiene esa confirmación "única". Su sucursal movingTomaster debería tener ahora una comisión más por delante que la maestra. (puede visualizar mediante el comando gitk). Debe mover su rama principal hasta el mismo punto de confirmación con movingTomaster –

+0

¿Cómo se podría realizar ese "movimiento"? ¿No es solo una combinación (enviada rápidamente en este caso)? – zerkms

Cuestiones relacionadas