Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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.
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
- Visual Studio 2019: menú Git
- Visual Studio 2019: Team Explorer
- Línea de comandos de Git
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 .
Elija Administrar ramas de Git > para abrir la ventana Repositorio de Git.
En la ventana Repositorio de Git , haga clic con el botón derecho en la rama de destino y seleccione Desproteger.
Haga clic con el botón derecho en la rama de origen y seleccione Rebase <source-branch> en <target-branch>.
Visual Studio mostrará un mensaje de confirmación después de un rebase exitoso.
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.
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:
Vaya a Herramientas>Opciones>Control de código fuente>Configuración Global de Git.
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.
- Visual Studio 2022
- Visual Studio 2019: menú Git
- Visual Studio 2019: Team Explorer
- Línea de comandos de Git
En la ventana Cambios de Git, seleccione el botón de 'push' para empujar tu confirmación.
O bien, puede seleccionar Push en el menú Git.
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.
Visual Studio mostrará un mensaje de confirmación después de un empuje exitoso.
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
- Visual Studio 2019: menú Git
- Visual Studio 2019: Team Explorer
- Línea de comandos de Git
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.