2011-02-22 17 views
12

Entiendo que la estrategia de fusión "nuestra" (escuchar las cotizaciones alrededor de fusionar?) En realidad no utiliza ninguna confirmación de la otra rama.¿Por qué se debería usar "git merge -s ours"?

La estrategia "nuestra" a veces se menciona como "mantener la historia del otro". Pero registra esa historia como "aplicada". Extraño. ¿Hay casos en los que deseo este comportamiento?

Como alternativa, puede importar la otra rama y dejar su historial allí, donde corresponde.

Tenga en cuenta que estoy preguntando acerca de la estrategia "-s ours", no la opción "-X la nuestra" a "-s recursivo" (que es diferente ya que aplica aquellas confirmaciones que no entran en conflicto).

+0

Aunque muy tarde: un vistazo [aquí] (http://stackoverflow.com/a/1426163/5784831) – Christoph

Respuesta

2

Estoy usando esta pseudo-fusión en una rama adicional utilizada para rastrear las otras ramas, incluidas las abandonadas. Esta rama adicional tiene, de hecho, solo un archivo (llamado branches-list), que contiene una lista de texto de las ramas activa e inactiva, pero en los puntos importantes (principalmente puntos de ramificación y "fin de rama", fusionar o abandonar) las ramas de desarrollo se fusionan (con "-s ours") a esta rama.

Aquí una reciente captura de pantalla de our project:

screenshot

Por lo tanto, yo por último ramificado elo-test de maestro, y después de esto yo ramificado stroke-transform-example para mi question here (y la respuesta - esto debería haber sido dos diferentes se compromete, sin embargo). En cada uno de esos puntos de ramificación, y más importante aún, en cada punto cuando una rama termina sin fusionarse con alguna otra rama (que pasará a stroke-transform-example cuando vuelva a limpiar), ahora fusiono esta rama con -s ours a la meta- rama branches.

Luego puedo eliminar las ramas no usadas más sin perder su historial, por lo que la salida de git branch -a es siempre bastante pequeña. Si alguna vez quiero mirar atrás a lo que hice entonces, puedo encontrarlos fácilmente.

(creo que esto no es realmente lo que esta opción está hecho para, pero funciona bastante bien.)

+0

Gracias para tu respuesta ilustrativa. Después de * fusionar -sours ", discriminar esta fusión de" pseudo "de" fusión real "requiere mirar el diff, ¿estoy haciendo esto bien? –

+0

Por cierto, creo que intentaré este [enlace] (http: //www.fencing -game.de/es/rules) de vez en cuando (con papel y lápiz)! –

+1

Sí, tienes razón. En mi caso, estoy usando estas pseudo fusiones solo en la rama 'branches', por lo que es fácil de ver. es mucho más fácil jugar con el soporte informático, ya que no debe ver los puntos ocultos de su contrahent. Siéntase libre de mirar nuestro programa, es gratis para jugar en línea :-) –

0

Otro uso es como una alternativa a un empuje de fuerza que no causa cambios no rápidos para otros.

E.g. desea revertir una confirmación entrante (estúpida), pero no desea hacer git push -f porque luego pasará la siguiente media hora guiando a su cliente a recuperarse de eso, y quiere una alternativa más corta a

git checkout -b temp remote/origin 
git revert HEAD 
git push temp:origin 
git checkout master 
git merge origin/master 

tan sólo tiene que hacer

git merge -s ours origin/master 
1

Otra razón es cuando se tiene una rama que es muy fuera de sincronía con su rama activa, y desea actualizar el viejo con la que está activa, pero es posible combinar los conflictos evitar que esto se haga fácilmente con una combinación normal.

Por ejemplo, mi caso de uso fue de:

Usted tiene una rama principal y dev, y por alguna razón, no han actualizado su rama principal en semanas, y su intento de fusionar su sucursal dev en maestro ahora resultados en conflictos de fusión. Lo que puede querer hacer es sobreescribir su rama maestra con el estado actual de su rama de desarrollo, así que ponga ambas sincronizadas.

Lo que puede hacer en este caso es el siguiente, siguiendo los pasos descritos por otro usuario de SO in another SO answer here. Pero, por favor, consulte mi nota de advertencia a continuación.

git checkout dev 
git merge -s ours master 
git checkout master 
git merge dev 

Vale la pena una breve nota: Al final de la misma, mi maestro estaba al día con mi dev, pero mostró dev 4 compromete a ser empujados a la distancia, lo cual es extraño. Debería haber 0 para enviar, ya que solo quería actualizar el maestro. Sin embargo, el código parecía estar bien. Solo vale la pena señalar, ya que nunca antes había usado git merge -s ours antes de este momento, así que no estoy 100% en su uso.

También he encontrado otra respuesta usando ours que podría ser útil para la gente: https://stackoverflow.com/a/13307342/339803