2010-03-30 5 views
5

Necesito fusionar entre dev y master con frecuencia.git estrategia para tener un conjunto de confirmaciones limitadas a una rama en particular

También tengo un compromiso que debo aplicar solo al desarrollador, para que las cosas funcionen localmente.

Anteriormente solo me fusioné de dev a master, así que tenía una rama production_changes que contenía el "deshacer commit" del dev special commit. y del maestro, fusioné esto. Solía ​​trabajar bien

Ahora cada vez que Combinar desde dev para dominar y viceversa, estoy teniendo quedarse con la selección y aplicar los mismos cometen una y otra vez :(. ¿Qué es feo.

¿Qué estrategia puedo adaptar de manera que puedo combinar sin problemas entre 2 ramas, sin embargo, mantener algunos de los cambios sólo en una de esas ramas?

Respuesta

1

yo recomendaría una merge driver (scripts declarados en una directiva de combinación dentro de un archivo .gitattributes) con el fin de evitar que ciertos archivos ser afectado por una confirmación determinada.
(por ejemplo, si ciertos archivos mu st no se modificará, ese controlador sería tan simple como "keep mine" merge. Que se ha utilizado para merge only specific directories por ejemplo, o para realizar un seguimiento de cómo config files are managed por sucursal)

LA OP añade:.

pero estoy en busca más por una solución inteligente, si es que existe, al igual que "crear una sucursal que tiene la acción de deshacer sólo cometen y aplicarlo a dominar, fingir en dev"

solución inteligente ...
Bueno, yo puedo proponer git rerere (reutilización resolución registrada de fusión en conflicto: si combina a dev desencadenar un conflicto, y si la resolución de ese conflicto está cancelando efectivamente esa fusión, puede registrar esa resolución, para que se repita automáticamente durante la siguiente fusión.

Consulte Rerere Your Boat... por Scott Chacon para obtener más información en este comando.

+0

Debería funcionar, pero estoy buscando más una solución inteligente, si existe, como "crear una rama que solo tenga la función deshacer y aplicarla al maestro, falsa en el desarrollador" –

+0

@becomingGuru: acaba de completar mi respuesta con 'git rerere' en caso de que pueda ayudar. – VonC

0

Me gustaría hacer esto con una sucursal local (es decir, que nunca fue empujado a ninguna parte) en el dev repos que me gustaría volver a la parte superior de la rama dev cada vez que saqué del maestro. No es del todo perfecto, pero creo que es un poco mejor que la selección.

+0

Incluso si rebase a la última versión del máster, en algún momento, necesita fusionar el máster cuando ingrese esta confirmación. –

1

Lie to Git: crea el diff en una rama separada enraizada en el punto de bifurcación de la rama 'dev'. A continuación, "fusionar" en maestro sin cambiar realmente amo: algo así como git merge -s ours devfix-branch (lo hace en master)

luego volver a dev y se fusionan normalmente: git merge devfix-branch. Ahora, tanto dev como master pensarán que ya tienen el devfijo, y usted puede seguir fusionándose con el maestro.

Se deja como un ejercicio al lector para ver si esto realmente funciona, o si se puede hacer que funcione.

+0

¡Impresionante! ¡Gracias! La próxima vez que quiera hacer tal cosa, esto es lo que voy a usar. Por ahora, lo resolví utilizando algunos archivos no revisados ​​para encargarme de los cambios, ¡para que la fusión sea perfecta! –

Cuestiones relacionadas