2011-08-10 16 views
6

Me gustaría fusionar los cambios de una rama B a mi rama A, de tal manera que la fusión excluya cualquier cambio en un directorio determinado. El problema aquí es que tengo algunos commits que abarcan cambios en múltiples directorios, uno de los cuales debe ser excluido.Fusionar una rama git, mientras se excluyen los cambios en algún directorio

¿Es posible algo así, por ejemplo, con la reescritura de historial?

Para aclarar, mi estructura de directorios es:

root/x 
root/y 
root/z 

algunas de las confirmaciones afectan a los tres directorios. Ahora, me gustaría fusionarme de tal forma que tenga cambios en el historial tanto en y como en z, pero no en x.

Respuesta

6

Puede combinar la otra rama sin comprometerse, y luego restablecer el estado del directorio:

git merge --no-commit <branch> 
git reset root/x 
git commit 

mejor aún a dividir sus confirmaciones como se ha mencionado por @useless in his answer

+0

Gracias. Este último paso es algo que me gustaría evitar. Rebase parece una buena cosa para probar, pero tengo más de 100 commits ... –

+0

bueno, mi enfoque funciona :) crea una "combinación malvada" aunque – knittl

+0

Evitar compromisos atómicos en git es como evitar el agua en la ducha. Eres libre de probarlo, pero simplemente no es cómo se suponía que iba a ser utilizado, y vas a trabajar mucho más. –

3

Si los cambios siguen siendo locales, la forma más fácil es mediante splitting your commits de realizar cambios genuinamente ortogonales que se puedan combinar de forma independiente.


Muerto enlace de reparación: tratar this link lugar (o simplemente ver a su página de manual local para git rebase), y buscar hacia abajo para División compromete.

+0

Si divido confirmaciones, ¿cómo puedo fusionarlos de forma independiente? Quiero decir, cuando se fusiona, se toman todas las confirmaciones hasta la confirmación seleccionada que se está fusionando. No estoy seguro de entender de esta manera. El modo '--no-commit' es claro en su lugar. –

Cuestiones relacionadas