Posterior a mirar en varios repositorios y sitios webs al terminar hemos descubierto la resolución que te mostramos ahora.
Solución:
Tuve exactamente el mismo problema que mencionaste anteriormente. Pero encontré esto más claro al explicar la respuesta.
Resumen:
-
Consulte la (s) ruta (s) de la rama que desea fusionar,
$ git checkout source_branch --
... Hint: It also works without `--` like seen in the linked post. -
o para fusionar selectivamente trozos
$ git checkout -p source_branch --
...
Alternativamente, use restablecer y luego agregue con la opción -p
,
$ git reset ...
$ git add -p ...
-
Finalmente comete
$ git commit -m "'Merge' these changes"
Utiliza el comando cherry-pick para obtener confirmaciones individuales de una rama.
Si los cambios que desea no están en confirmaciones individuales, utilice el método que se muestra aquí para dividir la confirmación en confirmaciones individuales. En términos generales, usas git rebase -i
para obtener el compromiso original para editar, luego git reset HEAD^
para revertir los cambios de forma selectiva, git commit
para cometer ese bit como un nuevo compromiso en la historia.
Hay otro buen método aquí en Red Hat Magazine, donde usan git add --patch
o posiblemente git add --interactive
que le permite agregar solo partes de un trozo, si desea dividir diferentes cambios en un archivo individual (busque en esa página para “dividir”).
Después de dividir los cambios, ahora puede seleccionar solo los que desee.
Para fusionar selectivamente archivos de una rama en otra rama, ejecute
git merge --no-ff --no-commit branchX
dónde branchX
es la rama desde la que desea fusionar en la rama actual.
los --no-commit
La 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 enviarlos usted mismo.
Dependiendo de cómo desee fusionar archivos, hay cuatro casos:
1) quieres un true unir.
En este caso, acepta los archivos fusionados 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 desde 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 el file1
automatizado por Git.
3) Si desea la versión en branchX (y no una true unir).
Correr:
git checkout branchX file1
Esto recuperará la versión de file1
en branchX
y sobrescribir file1
fusionado automáticamente por Git.
4) El último caso es si desea seleccionar solo combinaciones específicas en file1
.
En este caso, puede editar el file1
directamente, actualícelo a la versión que desee de file1
convertirse, y luego comprometerse.
Si Git no puede fusionar un archivo automáticamente, lo notificará como “no fusionado“y producir una copia en la que deberá resolver los conflictos manualmente.
Para explicar más con un ejemplo, digamos que desea fusionar 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 ..." as appropriate to mark resolution)
#
# both modified: file4
#
Dónde 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 el master
y branchX
porque los tres archivos se han combinado sin ningún conflicto.
Puede inspeccionar cómo se realizó la fusión ejecutando el git diff --cached
;
git diff --cached file1
git diff --cached file2
git diff --cached file3
Si encuentra alguna fusión indeseable, puede
- editar el archivo directamente
- ahorrar
git commit
Si no quieres fusionarte file1
y desea conservar la versión en la rama actual
Correr
git checkout HEAD file1
Si no quieres fusionarte file2
y solo quiero la versión en branchX
Correr
git checkout branchX file2
Si quieres file3
para fusionarse automáticamente, no hagas nada.
Git ya lo ha fusionado en este momento.
file4
arriba es una fusión fallida de 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 el fusionado editando el archivo directamente o ejecutando el comando de pago para la versión en la rama que desee file4
convertirse.
Finalmente, no te olvides de git commit
.
Al final de la página puedes encontrar las aclaraciones de otros creadores, tú también eres capaz mostrar el tuyo si dominas el tema.