Actualización del código con los comandos fetch, merge y pull
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2019
Visual Studio 2019 | Visual Studio 2022
Cuando haya varios colaboradores en un proyecto, mantenga actualizado el repositorio de Git local descargando e integrando el trabajo que otros usuarios han cargado en el repositorio remoto del proyecto. Estos comandos de Git actualizan el repositorio local:
- El comando fetch de Git descarga las confirmaciones nuevas que otros usuarios han cargado en el repositorio remoto. Las ramas de seguimiento remoto de la caché del repositorio local se actualizan, mientras que las ramas locales permanecen sin cambios.
- El comando merge de Git integra confirmaciones de una o varias ramas de origen en una rama de destino.
- El comando rebase de Git integra confirmaciones de una rama de origen en una rama de destino, pero usa una estrategia diferente que en el comando merge de Git.
- El comando pull de Git realiza una recuperación de cambios y, después, una fusión mediante combinación o una fusión mediante cambio de base para integrar confirmaciones con recuperación de cambios en la rama local actual.
Visual Studio usa un subconjunto de esos comandos de Git al sincronizar el repositorio local con un repositorio remoto.
Para obtener información general sobre el flujo de trabajo de Git, vea Tutorial de Git de Azure Repos.
En este artículo se proporcionan procedimientos para las tareas siguientes:
- Descarga de cambios con la fetch
- Actualización de ramas con merge o rebase
- Descarga de cambios y actualización de ramas con el comando pull
Descarga de cambios con la recuperación de cambios
El comando fetch de Git descarga confirmaciones de ramas remotas y objetos de archivo a los que se hace referencia que no existen en el repositorio local, y actualiza las ramas de seguimiento remoto en la caché del repositorio local. Las ramas de seguimiento remoto son copias de ramas remotas de solo lectura almacenadas en la caché local y no son las ramas locales. El comando fetch de Git no actualiza las ramas locales. Por ejemplo, si un repositorio remoto que designa origin
tiene una rama bugfix3
, el comando fetch de Git actualizará la rama de seguimiento remoto denominada origin/bugfix3
y no la rama local bugfix3
. Puede usar ramas de seguimiento remoto para lo siguiente:
- Comparar una rama de seguimiento remoto con una rama local para revisar los cambios capturados.
- Combinar una rama de seguimiento remoto en una rama local.
- Crear una rama local a partir de una rama de seguimiento remoto.
- 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 los menús contextuales del Explorador de soluciones. En Visual Studio 2019, versión 16.8, también se ofrece la interfaz de usuario de Git Team Explorer. Parar obtener más información, vea la pestaña Visual Studio 2019: Team Explorer.
En la ventana Cambios de Git, elija Recuperar cambios. Después, seleccione outgoing/incoming (saliente/entrante) para abrir la ventana Repositorio de Git.
También puede elegir Recuperar cambios en el menú Git.
En la ventana Repositorio de Git, las confirmaciones con cambios recuperados aparecen en la sección Entrante. Seleccione una confirmación con cambios recuperados para ver la lista de archivos modificados en esa confirmación. Seleccione un archivo modificado para ver una vista de diferencias del contenido cambiado.
Sugerencia
La recuperación de cambios no eliminará las ramas de seguimiento remoto en la caché del repositorio local que ya no tengan un homólogo remoto. Para configurar Visual Studio a fin de eliminar ramas obsoletas de seguimiento remoto durante una recuperación de cambios, haga lo siguiente:
- Seleccione Herramientas>Opciones>Control de código fuente>Git Global Settings (Configuración global de Git).
- Establezca la opción Prune remote branches during fetch (Eliminar ramas remotas durante la recuperación de cambios) en
True
.
Después de ejecutar el comando fetch de Git, puede comparar una rama local con su rama de seguimiento remoto correspondiente para ver lo que ha cambiado en la rama remota. Si decide actualizar la rama local actual con cambios recuperados, puede realizar merge o rebase de Git. O bien puede ejecutar el comando pull de Git, que combina un comando fetch de Git con merge o rebase. Los comandos merge y rebase de Git actualizan una rama de destino aplicando confirmaciones de una rama de origen a ella. Pero ambos comandos usan estrategias diferentes. Para obtener más información, vea Actualización de ramas con merge o rebase y Cuándo conviene utilizar rebase frente a merge.
Actualización de ramas con merge o rebase
El comando merge y rebase de Git integran confirmaciones de una rama de origen en la rama local actual (rama de destino). El comando merge de Git realiza una combinación de avance rápido o sin avance rápido. La combinación sin avance rápido también se conoce como combinación triple o verdadera. La fusión mediante cambio de base de Git es otro tipo de combinación. Estos tipos de combinación se muestran en el diagrama siguiente.
Los comandos merge y rebase de Git se usan ampliamente en el flujo de trabajo de Git. Al trabajar en una característica local o una rama de corrección de errores, es habitual:
- Mantener la rama local
main
actualizada con respecto a su homóloga remota mediante la incorporación de cambios periódica para recuperar cambios y combinar confirmaciones remotas. - Integrar las actualizaciones de la rama local
main
en la rama de características local con una fusión mediante cambio de base o una fusión mediante combinación. - Realice una copia de seguridad del trabajo en la rama de características local insertándola en la rama remota correspondiente.
- Al finalizar la característica, cree una PR para combinar la rama de características remota en la rama
main
remota.
Este enfoque le ayuda a lo siguiente:
- Mantenerse al tanto del trabajo reciente que han realizado otros usuarios y que podrían afectar al suyo.
- Resolver rápidamente los conflictos entre su trabajo y el de otros.
- Aplicar la característica nueva sobre el contenido del proyecto actualizado.
- Obtener una revisión de PR del trabajo.
Combinar
En el caso del comando merge de Git, si existe la sugerencia de la rama de destino en la rama de origen, el tipo de combinación predeterminado será una combinación de avance rápido. De lo contrario, el tipo de combinación predeterminado será una combinación sin avance rápido.
Una fusión mediante combinación de Git de avance rápido nunca puede tener un conflicto de fusión mediante combinación porque Git no aplicará una fusión mediante combinación de avance rápido si la sugerencia de la rama de destino se ha divergido de la rama de origen. De forma predeterminada, Git usa una fusión mediante combinación de avance rápido siempre que sea posible. Por ejemplo, Git aplicará una fusión mediante combinación de avance rápido en una rama local que solo actualice incorporando cambios de su rama equivalente remota.
Una fusión mediante combinación sin avance rápido de Git genera una nueva rama de destino "confirmación de combinación" que integra los cambios de la rama de origen con los cambios de la rama de destino. Los cambios aplicables son los realizados después de la última confirmación que es común a ambas ramas. En el diagrama anterior, la confirmación C es la última confirmación común en ambas ramas. Si algún cambio de la rama de origen entra en conflicto con cualquier cambio de la rama de destino, Git le pedirá que resuelva el conflicto de combinación. La confirmación de combinación (L) contiene los cambios integrados de la rama de origen y de la rama de destino. Los extremos de la rama de origen y destino (K y E) son los elementos primarios de la confirmación de combinación. En el historial de confirmaciones de la rama, una confirmación de fusión mediante combinación es un marcador útil para una operación Merge y muestra claramente qué ramas se han fusionado mediante confirmación.
La fusión mediante combinación de Git solo modifica la rama de destino; la rama de origen permanece sin cambios. Cuando encuentre uno o varios conflictos de fusión mediante combinación, debe resolverlos para completar la fusión mediante combinación. También puede cancelar la operación Merge y devolver la rama de destino a su estado anterior.
Para obtener más información sobre las opciones y estrategias de fusión mediante combinación, vea el Manual de referencia de Git y las Estrategias de fusión mediante combinación de Git.
Sugerencia
Si la rama de origen es una rama de seguimiento remoto, asegúrese de que está actualizada; para ello, ejecute un comando fetch de Git antes de la fusión mediante combinación.
- Visual Studio 2022
- Visual Studio 2019: menú Git
- Visual Studio 2019: Team Explorer
- Línea de comandos de Git
Elija Git > Administrar ramas en la barra de menús para abrir la ventana Repositorio de Git.
En la ventana Repositorio de Git, haga clic con el botón secundario en la rama de destino y seleccione Desproteger.
Haga clic con el botón secundario en la rama de origen y seleccione Merge <source-branch> into <target-branch> (Combinar <rama de origen> en la <rama de destino>).
Visual Studio mostrará un mensaje de confirmación cuando se produzca una combinación correcta.
Si la combinación se detiene debido a conflictos en esta, Visual Studio le enviará una notificación. Puede resolver los conflictos o cancelar la fusión mediante combinación y volver al estado previo a la fusión.
Fusión mediante cambio de base
La fusión mediante cambio de base de Git vuelve a secuenciar el historial de confirmaciones de la rama de destino para que contenga todas las confirmaciones de la rama de origen, seguidas de todas las confirmaciones de la rama de destino desde la última confirmación en común. Otra manera de interpretarlo es que una fusión mediante cambio de base de Git reproduce los cambios en la rama de destino sobre el historial de la rama de origen. Si algún cambio de rama de origen entra en conflicto con algún cambio de rama de destino, Git le pedirá que resuelva el conflicto de fusión mediante combinación. La fusión mediante cambio de base de Git no crea una confirmación de fusión mediante combinación. 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 la K, pero tiene un nuevo id. de confirmación porque se vincula a la confirmación E en lugar de a la C.
La fusión mediante cambio de base de Git solo modifica la rama de destino; la rama de origen permanece sin cambios. Cuando encuentre uno o varios conflictos de fusión mediante combinación, debe resolverlos para completar la fusión mediante cambio de base. También puede cancelar la operación de fusión mediante cambio de base y devolver la rama de destino a su estado anterior.
Si es la única persona que trabaja en la rama de características o de corrección de errores, considere la posibilidad de usar la fusión mediante cambio de base de Git para integrar nuevas confirmaciones de la rama main
en ella. De lo contrario, use la fusión mediante combinación de Git. Para obtener más información sobre la fusión mediante cambio de base de Git y cuándo usarla, vea Aplicación de cambios con fusión mediante cambio de base y Fusión mediante cambio de base frente a fusión mediante combinación.
Sugerencia
Si la rama de origen es una rama de seguimiento remoto, asegúrese de que la rama está actualizada; para ello, ejecute una recuperación de cambios de Git antes de 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
Elija Git > Administrar ramas para abrir la ventana Repositorio de Git.
En la ventana Repositorio de Git, haga clic con el botón secundario en la rama de destino y seleccione Desproteger.
Haga clic con el botón secundario en la rama de origen y seleccione Rebase <target-branch> onto <source-branch> (Fusionar mediante cambio de base la <rama de origen> en la <rama de destino>).
Visual Studio mostrará un mensaje de confirmación después de realizar una fusión mediante cambio de base correcta.
Si la fusión mediante cambio de base se detiene debido a conflictos de la fusión mediante combinación, Visual Studio le avisará. Puede resolver los conflictos o cancelar la fusión mediante cambio de base y volver al estado anterior a esta fusión.
Descarga de cambios y actualización de ramas con incorporación de cambios
De forma predeterminada, la incorporación de cambios de Git combina una recuperación de cambios de Git y una fusión mediante combinación de Git para actualizar la rama local actual desde su homóloga remota. Opcionalmente, la incorporación de cambios de Git puede realizar una fusión mediante cambio de base de Git en lugar de una fusión mediante combinación de Git.
A diferencia de la recuperación de cambios de Git, la incorporación de cambios de Git actualizará la rama local actual inmediatamente después de descargar nuevas confirmaciones desde el repositorio remoto. Use la incorporación de cambios de Git cuando sepa que quiere actualizar la rama local actual justo después de una recuperación de cambios de Git.
Sugerencia
Para configurar Visual Studio a fin de realice una fusión mediante cambio de base en lugar de una fusión mediante combinación al incorporar cambios, realice lo siguiente:
- En el menú Git, vaya a Herramientas>Opciones>Control de código fuente>Git Global Settings (Configuración global de Git).
- Establezca la opción Rebase local branch when pulling (Fusionar mediante cambio de base la rama local al incorporar cambios) en
True
.
- 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, elija Incorporar cambios.
También puede elegir Incorporar cambios en el menú Git.
Se muestra un mensaje de confirmación cuando se completa la operación de incorporación de cambios.
Si hay conflictos durante la parte de la fusión mediante combinación de la operación de incorporación de cambios, Visual Studio le avisará. Puede resolver los conflictos o cancelar la fusión mediante combinación y volver al estado previo a la fusión.
Nota:
En Visual Studio, la opción Sincronizar realiza una Incorporación de cambios y, después, un Envío de cambios para sincronizar una rama local y una remota. Para obtener más información sobre la opción Sincronizar, vea Uso de git fetch, pull, push and sync para el control de versiones en Visual Studio.
Pasos siguientes
Uso compartido de código con envío de cambiosResolución de conflictos de fusión mediante combinación