Aplicar cambios con rebase

Servicios de Azure DevOps | Azure DevOps Server | Azure DevOps Server 2022

Visual Studio 2019 | Visual Studio 2022

Sugerencia

Puede usar la inteligencia artificial para ayudar con las tareas de Azure DevOps. Consulte Habilitar la asistencia de IA con Azure DevOps MCP Server para comenzar.

Git mantiene automáticamente un historial de desarrollo en una rama vinculando cada nueva confirmación a su predecesor. Al combinar una rama en otra, el historial puede ser menos sencillo. Por ejemplo, una fusión mediante combinación sin avance rápido combina líneas de desarrollo divergentes creando una confirmación de fusión mediante combinación con varias anteriores. Por el contrario, una rebase de Git combina líneas de desarrollo divergentes sin crear una confirmación de combinación, lo que da como resultado un historial de confirmaciones más sencillo, pero pierde información sobre la combinación. La elección del tipo de combinación probablemente se ve afectada por si desea conservar un registro de la combinación o simplificar el historial de confirmaciones.

En este artículo se describe cuándo usar una fusión mediante cambio de base en lugar de una fusión mediante combinación sin avance rápido y se proporcionan procedimientos para las siguientes tareas:

  • Fusionar mediante cambio de base la rama local
  • Forzar el envío de cambios de la rama local después de una fusión mediante cambio de base
  • Fusionar mediante cambio de base de forma interactiva para fusionar mediante combinación con "squash" confirmaciones locales

Para obtener información general sobre el flujo de trabajo de Git, consulte tutorial de Git de Azure Repos.

Prerrequisitos

Categoría Requisitos
Acceso al proyecto Miembro de un proyecto.
Permisos - Ver código en proyectos privados: al menos acceso básico.
- Clonar o contribuir al código en proyectos privados: ser miembro del grupo de seguridad Contribuidores o contar con los permisos correspondientes en el proyecto.
- Establecer permisos de rama o repositorio: administre permisos para la rama o el repositorio.
- Establezca directivas de rama, comprobaciones de estado o cambie la rama predeterminada: edite el permiso de directivas para el repositorio o rama o la pertenencia al grupo de seguridad administradores de Project.
- Importar un repositorio: miembro del grupo de seguridad de Administradores de proyecto o repositorio Git a nivel de proyecto Crear repositorio con la opción Permitir. Para obtener más información, consulte Establecimiento de permisos de repositorios Git.
Servicios Repositorios habilitados.
Herramientas Optional. Uso de az repos comandos: CLI de Azure DevOps.
Categoría Requisitos
Acceso al proyecto Miembro de un proyecto.
Permisos - Ver código: al menos acceso básico.
- Clonar o contribuir al código: Miembro de la Colaboradores grupo de seguridad o los permisos correspondientes en el proyecto.
Servicios Repositorios habilitados.

Fusionar mediante cambio de base la rama local

Git rebase integra confirmaciones de una rama de origen en la rama local actual (rama de destino). La rama de origen permanece sin cambios. Para comparar, el rebase de Git y otros tipos de combinación se muestran en el diagrama siguiente.

Diagrama que muestra las confirmaciones antes y después de usar Git rebase.

Git rebase reorganiza el historial de confirmaciones de las ramas de destino para que contenga todas las confirmaciones de las ramas de origen, seguidas de todas las confirmaciones de las ramas de destino desde la última confirmación común. Otra manera de interpretarlo es que una fusión mediante cambio de base reproduce los cambios en la rama de destino sobre el historial de la rama de origen. En particular, una fusión mediante cambio de base de Git cambia la secuencia de confirmaciones de la rama de destino existente, que no es el caso de las otras estrategias de fusión mediante combinación. En el diagrama anterior, la confirmación K' contiene los mismos cambios que K, pero tiene un nuevo identificador de confirmación porque se vincula a la confirmación E en lugar de C.

Durante una rebase, si un cambio de rama de origen entra en conflicto con un cambio de rama de destino, Git le pedirá que resuelva el conflicto de combinación. Puede resolver conflictos de fusión mediante combinación durante una fusión mediante cambio de base de la misma manera que se resuelven los conflictos de fusión mediante combinación durante una fusión mediante combinación.

Fusión mediante cambio de base frente a fusión mediante combinación sin avance rápido

El rebaseo en Git da como resultado un historial de commits más sencillo pero menos exacto que un merge sin avance rápido, también conocido como merge de tres vías o merge verdadero. Cuando quiera un registro de una fusión mediante combinación en el historial de confirmaciones, use una fusión mediante combinación sin avance rápido.

Si es la única persona que trabaja en una rama de características o de corrección de errores, considere la posibilidad de usar una fusión mediante cambio de base para integrar periódicamente el trabajo de rama main reciente en ella. Esa estrategia ayuda a asegurarse de mantenerse al tanto del trabajo reciente de otros usuarios y resolver rápidamente los conflictos de combinación que surjan. Al realizar una fusión mediante cambio de base, se implementa la nueva característica sobre el trabajo de rama main más reciente, lo que ayuda a mantener un historial lineal de confirmaciones.

Para obtener más información sobre la rebase de Git y cuándo usarlo, consulte Rebase frente a merge.

Directrices de fusión mediante cambio de base y de envío de cambios forzado

Si realiza una fusión mediante cambio de base de una rama local de la cual ha enviado cambios anteriormente y, después, vuelve a ejecutar el comando push de Git predeterminado, se producirá un error en el envío de cambios. El comando "push" predeterminado de Git aplica una fusión por avance rápido para integrar tu rama local en la rama remota. Ese comando producirá un error después de un rebase porque el rebase modifica la secuencia de commits existentes en la rama de destino local, por lo que ya no coincide con el historial de su contraparte remota. En este escenario, un envío de cambios forzado se realizará correctamente, y lo hace sobrescribiendo la rama remota.

La rebase de Git y la inserción forzada son herramientas eficaces, pero tenga en cuenta estas directrices al decidir si se deben usar:

  • No realice una fusión mediante cambio de base de una rama local de la que se hayan enviado cambios y compartido con otros usuarios, a menos que tenga seguridad de que nadie usa la rama compartida. Después de una fusión mediante cambio de base, la rama local ya no coincidirá con el historial de su homóloga remota.
  • No fuerce el envío de cambios en una rama remota que usen otros usuarios, ya que su versión local de la rama remota ya no coincidirá con el historial actualizado de la rama remota.
  • El equipo debe aceptar los escenarios de uso para la fusión mediante cambio de base y el envío de cambios forzado.

Sugerencia

Para un proceso de revisión colaborativa, use un pull request para fusionar un nuevo trabajo en la rama predeterminada de un repositorio remoto.

Cómo realizar la fusión mediante cambio de base

Visual Studio 2022 proporciona una experiencia de control de versiones de Git mediante el menú Git , Cambios de Git y a través de menús contextuales en el Explorador de soluciones. La versión 16.8 de Visual Studio 2019 también ofrece la interfaz de usuario de Git de Team Explorer . Para obtener más información, consulte la pestaña Visual Studio 2019 - Team Explorer .

  1. Elija Administrar ramas de Git > para abrir la ventana Repositorio de Git.

    Captura de pantalla de la opción Administrar ramas en el menú Git de Visual Studio.

  2. En la ventana Repositorio de Git , haga clic con el botón derecho en la rama de destino y seleccione Desproteger.

    Captura de pantalla de la opción Restaurar en el menú contextual de la rama en la ventana Repositorio de Git de Visual Studio.

  3. Haga clic con el botón derecho en la rama de origen y seleccione Rebase <source-branch> en <target-branch>.

    Captura de pantalla de la opción Rebase en el menú contextual de la rama en la ventana Repositorio de Git de Visual Studio.

  4. Visual Studio mostrará un mensaje de confirmación después de un rebase exitoso.

    Captura de pantalla del mensaje de confirmación de rebase en la ventana Repositorio de Git de Visual Studio.

    Si la reorganización se detiene debido a conflictos de fusión, Visual Studio le notificará. Puede resolver los conflictos o cancelar el rebase y volver al estado anterior al rebase.

    Captura de pantalla del mensaje de conflicto de rebase en la ventana Repositorio de Git de Visual Studio.

Forzar el envío de cambios de la rama local después de una fusión mediante cambio de base

Si realiza una fusión mediante cambio de base de una rama local de la que anteriormente ha enviado cambios, un envío de cambios predeterminado de Git posterior producirá un error. En su lugar, puede forzar el envío de cambios de la rama local para sobrescribir su homóloga remota a fin de que sus historiales de confirmación coincidan.

Advertencia

No fuerce nunca el envío de cambios de una rama en la que otros usuarios estén trabajando. Para obtener más información, vea Directrices de la fusión mediante cambio de base y el envío de cambios forzado.

Para realizar un empuje forzado en Visual Studio, primero debe habilitar la opción de empuje forzado:

  1. Vaya a Herramientas>Opciones>Control de código fuente>Configuración Global de Git.

  2. Seleccione la opción Enable push --force-with-lease (Habilitar envío de cambios --force-with-lease).

La marca --force-with-lease de envío de cambios de Git es más segura que la marca --force porque no sobrescribirá una rama remota que tenga confirmaciones que no están integradas dentro de la rama local que va a forzar el envío de cambios.

  1. En la ventana Cambios de Git, seleccione el botón de 'push' para empujar tu confirmación.

    Captura de pantalla del botón con flecha hacia arriba en la ventana de Cambios de Git de Visual Studio.

    O bien, puede seleccionar Push en el menú Git.

    Captura de pantalla de la opción Insertar del menú Git en Visual Studio.

  2. Si se produce un error en la operación de envío de cambios de Git predeterminada, Visual Studio inicia el cuadro de diálogo Git-Push failed (Error de envío de cambios de Git). Elija Force Push.

    Captura de pantalla de la ventana de diálogo de fallo en la operación push de Git en Visual Studio.

  3. Visual Studio mostrará un mensaje de confirmación después de un empuje exitoso.

    Captura de pantalla del mensaje de confirmación de push en Visual Studio.

Fusionar mediante cambio de base de forma interactiva para fusionar mediante combinación con "squash" confirmaciones locales

Normalmente, a medida que trabaje en una característica nueva de la rama de características local, creará varias confirmaciones. Cuando esté listo para publicar la nueva característica, es posible que quiera consolidar esas confirmaciones en una sola confirmación para simplificar el historial de confirmaciones. Puede usar una fusión mediante cambio de base interactiva para fusionar mediante combinación con squash varias confirmaciones en una sola confirmación.

Visual Studio 2022 no admite el rebaseo interactivo. Use la línea de comandos de Git en su lugar.

Nota:

Los usuarios de Azure DevOps pueden squash merge para condensar el historial de confirmaciones de una rama temática durante una pull request.

Pasos siguientes