Skip to main content

Acerca de las fusiones de las solicitudes de extracción

Puedes combinar solicitudes de incorporación de cambios conservando todas las confirmaciones de cambios en una rama de característica, combinando todas las confirmaciones en una única confirmación o cambiando de base confirmaciones individuales desde la rama head hacia la rama base.

Combinación de confirmaciones

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".

Squash y combinación de las confirmaciones

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.

Mensaje de fusión para una fusión de combinación

Cuando realizas una fusión mediante combinación con "squash", GitHub genera un mensaje de confirmación que se puede editar. Según cómo se configure el repositorio y el número de confirmaciones en la solicitud de incorporación de cambios, sin incluir confirmaciones de combinación, este mensaje puede incluir el título de la solicitud de incorporación de cambios, la descripción de la solicitud de incorporación de cambios o la información sobre las confirmaciones.

Cantidad de confirmacionesResumenDescripción
Una confirmaciónEl título del mensaje de confirmación para la confirmación única, seguido de el número de la solicitud de extracciónEl cuerpo de texto del mensaje de la confirmación para la confirmación única
Más de una confirmaciónEl título de la solicitud de extracción, seguido por el número de dicha solicitudUn listado de los mensajes de confirmación para todas las confirmaciones combinadas, en orden cronológico

Los usuarios con acceso de administrador o mantenedor a un repositorio pueden configurar el mensaje de combinación predeterminado de su repositorio para todas las confirmaciones con "squash" para usar el título de la solicitud de incorporación de cambios, el título de la solicitud de incorporación de cambios y los detalles de confirmación, o el título y la descripción de la solicitud de incorporación de cambios. Para más información, consulta "Configurar combinación de confirmaciones para las solicitudes de extracción".

Combinar y fusionar una rama extensa

Si tiene previsto continuar trabajando en la rama principal de una solicitud de incorporación de cambios después de combinar la solicitud de incorporación de cambios, le recomendamos que no fusione mediante combinación con "squash" y combine la solicitud de incorporación de cambios.

Al crear una solicitud de incorporación de cambios, GitHub identifica la confirmación más reciente que se encuentra tanto en la rama principal como en la rama base: la confirmación antecesora común. Cuando combinas y fusionas la solicitud de extracción, GitHub crea una confirmación en la rama base que contiene todos los cambios que realizaste en la rama principal desde la confirmación del ancestro común.

Ya que esta confirmación se realizó únicamente en la rama base y no en la principal, el ancestro común de las dos ramas permanece sin cambios. Si sigues trabajando en la rama principal, entonces crea una solicitud de extracción nueva entre las dos ramas, la solicitud de extracción incluirá todas las confirmaciones que se hayan realizado desde el ancestro común, incluyendo aquellas que combinaste y fusionaste en la solicitud de extracción previa. Si no hay conflictos, puedes fusionar estas confirmaciones con seguridad. Sin embargo, este flujo de trabajo hace que los conflictos de fusión sean más probables. Si sigues combinando y fusionando las solicitudes de extracción para una rama principal extensa, tendrás que resolver los mismos conflictos repetidamente.

Fusionar mediante cambio de base y combinar las 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.

No puede fusionar mediante cambio de base y combinar automáticamente cuando:

  • La solicitud de extracción tiene conflictos de fusión.
  • Cambiar de base las confirmaciones desde la rama base a la rama encabezado conlleva a tener conflictos.
  • Cambiar de base las confirmaciones se considera "no seguro", como cuando un cambio de base es posible sin conflictos de fusión, pero produciría un resultado diferente del que produciría una fusión.

Si aún quiere fusionar mediante cambio de base las confirmaciones, pero no puede fusionar mediante cambio de base y fusionar automáticamente, debe hacer lo siguiente:

  • Cambiar de base la rama de tema (o rama de encabezado) hacia la rama base de forma local en la línea de comandos.
  • Resuelva los conflictos de combinación en la línea de comandos.
  • Realizar un empuje forzado de las confirmaciones cambiadas de base a la rama de tema de la solicitud de extracción (o rama de encabezado remota).

Cualquiera con permisos de escritura en el repositorio, puede combinar los cambios mediante el botón de fusión mediante cambio de base y combinación.

Combinaciones indirectas

Una solicitud de incorporación de cambios se puede combinar automáticamente si su rama principal se combina directa o indirectamente en la rama base externamente. Es decir, si la confirmación de la punta de la rama principal es accesible desde la punta de la rama de destino. Por ejemplo:

  • La rama main es una confirmación C.
  • La rama feature se ha ramificado a partir de main y se encuentra actualmente en la confirmación D. Esta rama tiene como destino una solicitud de incorporación de cambios main.
  • La rama feature_2 se ha ramificado a partir de feature y ahora está en la confirmación E. Esta rama también tiene como destino una solicitud de incorporación de cambios main.

Si la solicitud de incorporación de cambios E --> main se combina primero, la solicitud de incorporación de cambios D --> main se marcará como combinada automáticamente porque todas las confirmaciones de feature ahora son accesibles desde main. La combinación de feature_2 en main y la inserción main en el servidor desde la línea de comandos marcarán ambas solicitudes de incorporación de cambios como combinadas.

Las combinaciones indirectas solo pueden producirse cuando las confirmaciones de la rama principal de la solicitud de incorporación de cambios se insertan directamente en la rama predeterminada del repositorio o cuando las confirmaciones de la rama principal de la solicitud de incorporación de cambios están presentes en otra solicitud de incorporación de cambios y se combinan en la rama predeterminada del repositorio mediante la opción Crear una confirmación de combinación.

Si una solicitud de incorporación de cambios que contiene confirmaciones presentes en la rama principal de otra solicitud de incorporación de cambios se combina mediante las opciones Fusión mediante combinación con "squash" o Fusionar mediante cambio de base y combinación, se crea una confirmación en la rama base y la otra solicitud de incorporación de cambios no se combinará automáticamente.

Las solicitudes de incorporación de cambios que se combinan indirectamente se marcan como merged incluso si no se han cumplido las reglas de protección de ramas.

Información adicional