Saltar al contenido

¿Cómo puedo combinar selectivamente o seleccionar cambios de otra rama en Git?

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

  1. editar el archivo directamente
  2. ahorrar
  3. 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *