Skip to main content

Acerca de los métodos de fusión en GitHub

Puede permitir a los colaboradores con acceso de escritura al repositorio fusionar sus solicitudes de cambios con diferentes opciones de fusión, o bien implementar un método de fusión específico para todas las solicitudes de cambios del repositorio.

Puedes configurar las opciones de fusión para una solicitud de extracción en GitHub.com para que satisfagan las necesidades de tu flujo de trabajo y tus preferencias para administrar el historial de Git. Para obtener más información, vea «Configurar fusiones de solicitudes de extracción». Puedes implementar un tipo de método de fusión, como el cambio de base o la combinación de confirmaciones, con solo activar el método deseado para tu repositorio.

Note

Cuando uses la cola de fusión mediante combinación, ya no podrás elegir el método de fusión mediante combinación, ya que lo controla la cola. Para más información sobre los métodos de fusión, consulta "Administración de una cola de fusión mediante combinación".

Los métodos de fusión mediante combinación establecidos en el repositorio que entren en conflicto con la regla del método de fusión mediante combinación impedirán la fusión mediante combinación. Por ejemplo, si no permites la combinación de fusión mediante cambio de base para el repositorio y la regla de fusión mediante combinación solo permite la fusión mediante cambio de base en una rama, esa fusión mediante combinación no será posible. Para más información, consulta Reglas disponibles para conjuntos de reglas.

Cuando haces clic en la opción Combinar solicitud de incorporación de cambios predeterminada en una solicitud de incorporación de cambios en GitHub.com, todas las confirmaciones de la rama de características se agregan a la rama base en una confirmación de fusión mediante combinación. La solicitud de incorporación de cambios se combina mediante la opción--no-ff.

Para combinar las solicitudes de incorporación de cambios, debe tener permisos de escritura en el repositorio.

Diagrama de un flujo estándar de combinación y confirmación, donde las confirmaciones de una rama de características y una confirmación de combinación adicional se agregan a "main".

El método de fusión predeterminado crea una confirmación de fusión. Puedes impedir que cualquiera suba confirmaciones de fusión en una rama protegida imponiendo un historiar de confirmaciones linear. Para más información, consulta Acerca de las ramas protegidas.

Combinar tus confirmaciones de fusión

Al seleccionar la opción de fusión mediante combinación con "squash" en una solicitud de incorporación de cambios en GitHub.com, las confirmaciones de la solicitud de incorporación de cambios se fusionan mediante combinación con "squash" en una única confirmación. En lugar de ver todas las confirmaciones individuales de un contribuyente de una rama de tema, las confirmaciones se combinan en una confirmación y se fusionan en la rama predeterminada. Las solicitudes de incorporación de cambios con confirmaciones con fusión mediante combinación con "squash" se combinan mediante la opción de avance rápido.

Para fusionar las solicitudes de incorporación de cambios mediante combinación con "squash" y combinación, debe tener permisos de escritura en el repositorio y el repositorio debe permitir la fusión mediante combinación con "squash".

Diagrama de squash de confirmación, donde se combinan varias confirmaciones de una rama de características en una sola confirmación que se agrega a "main".

Puedes combinar y fusionar para crear un historial Git más optimizado en tu repositorio. Los compromisos de trabajo en curso son útiles cuando se trabaja en una rama de característica, pero no son tan importantes para retenerlos en el historial Git. Si combinas estas confirmaciones en una única confirmación al fusionar con la rama predeterminada, puedes conservar los cambios originales usando un historial Git claro.

Antes de activar combinar confirmaciones, considera estas desventajas:

  • Se pierde información acerca de cuándo se hicieron originalmente los cambios específicos y quién es el autor de las confirmaciones combinadas.
  • Si sigues trabajando en la rama principal de una solicitud de extracción después de combinar y fusionar, y luego creas una solicitud de extracción nueva entre las mismas ramas, las confirmaciones que ya hayas combinado y fusionado se listarán en la solicitud de extracción nueva. También podrías tener conflictos que tienes que resolver constantemente en cada solicitud de extracción sucesiva. Para más información, consulta Acerca de las fusiones de las solicitudes de extracción.
  • Es posible que sea más difícil usar algunos comandos de Git que usan el ID "SHA" o "hash", ya que se pierde el ID SHA para las confirmaciones originales. Por ejemplo, es posible que el uso de git rerere no sea tan eficaz.

Para más información, consulta Configurar combinación de confirmaciones para las solicitudes de extracción.

Cambiar de base y fusionar tus confirmaciones

Al seleccionar la opción para fusionar mediante cambio de base y mediante combinación en una solicitud de incorporación de cambios en GitHub.com, todas las confirmaciones de la rama de tema (o rama de encabezado) se agregan a la rama base por separado sin una confirmación de fusión mediante combinación. De este modo, el comportamiento de fusionar mediante cambio de base y combinar es similar a una combinación de avance rápido, ya que mantiene un historial de proyectos lineal. Sin embargo, el rebase lo logra al rescribir el historial de confirmaciones en la rama base con confirmaciones nuevas.

El comportamiento de fusión mediante cambio de base y combinación en GitHub varía ligeramente con respecto a git rebase. La fusión mediante cambio de base y combinación en GitHub siempre actualizará la información de la persona que confirma el cambio y creará SHA de confirmación, mientras que git rebase fuera de GitHub no cambia la información de la persona que confirma el cambio cuando se produce la fusión mediante cambio de base sobre una confirmación anterior. Para más información sobre git rebase, vea git-rebase en la documentación de Git.

Para fusionar mediante cambio de base y combinar solicitudes de incorporación de cambios, debe tener permisos de escritura en el repositorio y el repositorio debe permitir la combinación de fusión mediante cambio de base.

Para obtener una representación visual de git rebase, vea el capítulo "Git Branching - Rebasing" (Creación de ramas en Git: fusión mediante cambio de base) del libro Pro Git.

Antes de activar cambiar de base las confirmaciones, considera estas desventajas:

  • Es posible que los colaboradores del repositorio tengan que fusionar mediante cambio de base en la línea de comandos, resolver cualquier conflicto y forzar la inserción de los cambios en la rama de tema de la solicitud de cambios (o la rama principal remota) antes de poder usar la opción de fusionar mediante cambio de base y combinar de GitHub. El empuje forzado se debe realizar cuidadosamente para que los colaboradores no sobreescriban un trabajo en el que otros se hayan basado. Para más información sobre cuándo la opción Fusionar mediante cambio de base y mediante combinación está deshabilitada en GitHub y el flujo de trabajo para volver a habilitarla, consulta Acerca de las fusiones de las solicitudes de extracción.

  • Al usar la opción Fusionar mediante cambio de base y combinar en una solicitud de incorporación de cambios, es importante tener en cuenta que las confirmaciones de la rama principal se agregan a la rama base sin confirmar la comprobación de la firma. Al usar esta opción, GitHub crea una confirmación modificada con los datos y el contenido de la confirmación original. Esto significa que GitHub no creó realmente esta confirmación y, por tanto, no puede firmarla como un usuario genérico del sistema. GitHub no tiene acceso a las claves de firma privada del confirmador, por lo que no puede firmar la confirmación en nombre del usuario.

    Una solución para esta incidencia consiste en fusionar mediante cambio de base y combinar localmente y, luego, insertar los cambios en la rama base de la solicitud de incorporación de cambios.

Para más información, consulta Configurar rebase de confirmación para las solicitudes de extracción.