Skip to main content

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

Puedes permitirle a los colaboradores con acceso de escritura a tu repositorio fusionar sus solicitudes de extracción en your enterprise con diferentes opciones de fusión o implementar un método de fusión específico para todas las solicitudes de extracción de tu repositorio.

Puedes configurar las opciones de fusión para una solicitud de extracción en your enterprise para que éstas satisfagan las necesidades de tu flujo de trabajo y tus preferencias para administrar el historial de Git. Para más información, vea "Configuración de combinaciones de solicitud de incorporación de cambios". 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.

Cuando hace clic en la opción predeterminada Merge pull request (Combinar solicitud de incorporación de cambios) en una solicitud de incorporación de cambios en your enterprise, todas las confirmaciones de la rama de características se agregan a la rama base en una confirmación de fusió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.

standard-merge-commit-diagram

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, vea "Acerca de las ramas protegidas".

Combinar tus confirmaciones de fusión

Al seleccionar la opción Squash and merge en una solicitud de incorporación de cambios en la your enterprise, 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".

commit-squashing-diagram

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, vea "Acerca de las combinaciones de solicitudes de incorporación de cambios".
  • 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, vea "Configuración de las fusiones mediante combinación con "squash" de confirmaciones para las solicitudes de incorporación de cambios".

Cambiar de base y fusionar tus confirmaciones

Al seleccionar la opción Rebase and merge en una solicitud de incorporación de cambios en your enterprise, 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. 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 AE 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 incorporación de cambios (o la rama principal remota) antes de poder usar la opción de fusionar mediante cambio de base y combinar de your enterprise. 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 combinar está deshabilitada en your enterprise y el flujo de trabajo para volver a habilitarla, vea "Acerca de las combinaciones de solicitudes de incorporación de cambios".

  • 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, vea "Configuración de la fusión mediante cambio de base de las confirmaciones para solicitudes de incorporación de cambios".