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 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 GitHub.com, 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

Squash y combinación de las confirmaciones

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

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.

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 "Configuración de la fusión mediante combinación con "squash" de confirmació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 Rebase and merge 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. 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 es posible cambiar de base y fusionar automáticamente en GitHub.com 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 quieres cambiar de base las confirmaciones, pero no puedes cambiar de base y fusionar automáticamente en GitHub.com, debes 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 en GitHub.com.

Información adicional