Para fusionar selectivamente archivos de una rama a otra rama, ejecute
git merge --no-ff --no-commit branchX
¿De dónde branchX
es la rama que desea fusionar en la rama actual?
La --no-commit
opción organizará los archivos que Git ha fusionado sin comprometerlos realmente. Esto le dará la oportunidad de modificar los archivos combinados como desee y luego confirmarlos usted mismo.
Dependiendo de cómo desee fusionar archivos, hay cuatro casos:
1) Quieres una verdadera fusión.
En este caso, acepta los archivos combinados de la forma en que Git los fusionó automáticamente y luego los confirma.
2) Hay algunos archivos que no desea fusionar.
Por ejemplo, desea conservar la versión en la rama actual e ignorar la versión en la rama de la que se está fusionando.
Para seleccionar la versión en la rama actual, ejecute:
git checkout HEAD file1
Esto recuperará la versión de file1
en la rama actual y sobrescribirá la file1
automatizada por Git.
3) Si desea la versión en branchX (y no una verdadera fusión).
Correr:
git checkout branchX file1
Esto recuperará la versión de file1
in branchX
y sobrescribirá file1
automáticamente fusionada por Git.
4) El último caso es si desea seleccionar solo fusiones específicas file1
.
En este caso, puede editar el modificado file1
directamente, actualizarlo a lo que quiera que sea la versión file1
y luego confirmar.
Si Git no puede fusionar un archivo de forma automática, se reportará el archivo como " sin combinar " y producir una copia en la que deberá resolver los conflictos de forma manual.
Para explicar más a fondo con un ejemplo, supongamos que desea fusionarse branchX
en la rama actual:
git merge --no-ff --no-commit branchX
Luego ejecuta el git status
comando para ver el estado de los archivos modificados.
Por ejemplo:
git status
# On branch master
# Changes to be committed:
#
# modified: file1
# modified: file2
# modified: file3
# Unmerged paths:
# (use "git add/rm <file>..." as appropriate to mark resolution)
#
# both modified: file4
#
Donde file1
, file2
y file3
son los archivos que git se han fusionado automáticamente con éxito.
Lo que esto significa es que los cambios en master
y branchX
para todos esos tres archivos se han combinado sin ningún conflicto.
Puede inspeccionar cómo se realizó la fusión ejecutando git diff --cached
;
git diff --cached file1
git diff --cached file2
git diff --cached file3
Si encuentra alguna fusión indeseable, entonces puede
- edite el archivo directamente
- salvar
git commit
Si no desea fusionar file1
y desea conservar la versión en la rama actual
correr
git checkout HEAD file1
Si no desea fusionar file2
y solo desea la versión enbranchX
correr
git checkout branchX file2
Si desea file3
fusionarse automáticamente, no haga nada.
Git ya lo ha fusionado en este punto.
file4
arriba es una fusión fallida por Git. Esto significa que hay cambios en ambas ramas que ocurren en la misma línea. Aquí es donde deberá resolver los conflictos manualmente. Puede descartar la fusión realizada editando el archivo directamente o ejecutando el comando de pago para la versión en la rama en la que desea file4
convertirse.
Finalmente, no te olvides git commit
.