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.
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".
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 confirmaciones | Resumen | Descripción |
---|---|---|
Una confirmación | El título del mensaje de confirmación para la confirmación única, seguido de el número de la solicitud de extracción | El cuerpo de texto del mensaje de la confirmación para la confirmación única |
Más de una confirmación | El título de la solicitud de extracción, seguido por el número de dicha solicitud | Un 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 Enterprise Cloud 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 demain
y se encuentra actualmente en la confirmación D. Esta rama tiene como destino una solicitud de incorporación de cambiosmain
. - La rama
feature_2
se ha ramificado a partir defeature
y ahora está en la confirmación E. Esta rama también tiene como destino una solicitud de incorporación de cambiosmain
.
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.