Git
git pull

git pull comando: --force, --rebase option, fetch difference, conflict resolve

Este artículo cubre las preguntas más comunes sobre el comando git pull. Cubriremos los conceptos básicos y su uso, la opción --force, la opción --rebase, y cómo resolver conflictos.

1. Entendiendo git pull

El comando git pull aplica cambios desde un repositorio remoto a tu repositorio local. Esto se hace en dos pasos. El comando git pull utiliza el comando git fetch internamente para obtener los cambios del repositorio remoto localmente y almacenarlos en caché, El comando git merge para fusionar esos cambios en el repositorio local.

Si el commit en el repositorio remoto está justo delante, el pull se completa fácilmente usando una estrategia de avance rápido. Sin embargo, como indica git merge post, pueden surgir conflictos durante la fase de fusión, momento en el que se da al desarrollador la oportunidad de resolver el conflicto. Opcionalmente, puedes utilizar la estrategia rebase en lugar de fusionar.

Es fácil de usar. Cuando se extraen cambios de una rama específica en un repositorio remoto, se especifica el nombre remoto y el nombre de la rama.

$ git pull origin main

Si no escribe el nombre del repositorio remoto y el nombre de la rama como se muestra a continuación, puede tener consecuencias no deseadas, dependiendo de su rama de trabajo actual y de su configuración. Siempre que sea posible, utilice el nombre del repositorio remoto y el nombre de la rama juntos, como se muestra en el comando anterior.

$ git pull

Ahora veamos los resultados de ejecutar `git pull' en cada situación.

1.1 Estrategia de avance rápido

En git pull, la estrategia de avance rápido significa que la rama remota está unas pocas confirmaciones por delante de la última confirmación en la rama local. Por ejemplo, si la rama local tiene commit A <- commit B y la rama remota tiene commit A <- commit B <- commit C, entonces git pull sólo tomará commit C de la rama remota y la añadirá a la rama local. a la rama local.

En este caso, no se requiere ninguna fusión, por lo que el proceso de fusión no se interrumpe, y no hay necesidad de crear una confirmación de fusión separada. Veámoslo en acción.

git pull fast-forward

Como puedes ver en la salida, hemos usado la estrategia fast-forward, y el proceso git pull se ha completado automáticamente.

1.2. Cuando necesitas resolver un conflicto de fusión

Si hay líneas en conflicto entre las ramas remota y local, git pull se detendrá, especialmente el proceso de fusión. Por ejemplo, si las ramas remota y local han hecho nuevos commits con cambios diferentes.

En este caso, sólo se realizará git fetch y tendremos que terminar la fase merge. Ya aprendimos a resolver el conflicto de merge en el post de git merge, así que veamos el resultado de la ejecución de inmediato.

git pull con merge

Puedes ver en el log que hubo un conflicto merge durante el pull, que resolvimos y luego confirmamos.

2. Diferencia con git fetch

Como ya hemos mencionado, el comando git pull incluye el comando git fetch. El comando git fetch obtiene y guarda toda la información de la rama remota que la rama actual está siguiendo. Las ramas remotas suelen tener un formato de nombre origin/main y pueden verse con el comando git branch -r, como vimos en el post git branch.

Utiliza el siguiente comando

$ git fetch [remote-name]

El resultado de la ejecución es

git fetch result

Mirando la salida, puedes ver que algunos de los mensajes mostrados en la salida git pull de arriba son del comando fetch. Como hemos introducido el comando fetch, también podemos obtener el historial de la rama remota de esta forma

git fetch origin Verify with log

3. Opción --force

La opción --force que puede usarse con el comando git pull es en realidad una opción para el comando git fetch. Se usa cuando el historial de la rama remota y la rama local no coinciden, por ejemplo debido a borrados de confirmaciones. En estos casos, git fetch será rechazado, pero la opción --force forzará que el historial de confirmaciones de la rama remota actual sea sobrescrito por el de la rama local.

Sin embargo, esta opción no se aplica a la fase de fusión, por lo que incluso si fuerza una obtención, si entra en conflicto con la rama actual tendrá que resolver manualmente el conflicto de fusión.

Utilice el siguiente comando

$ git fetch --force [remote-name]

o

$ git pull --force [remote-name] [branch-name]

4. Opción --rebase

El comando git pull funciona con una estrategia merge por defecto. La opción --rebase le dice a git fetch que realice un comando git rebase en lugar de un merge. Las diferencias entre merge y rebase se resumen aquí.

Un pull con rebase adjunta los commits de la rama remota al ancestro común de las ramas remota y local, y adjunta los commits de la rama local a ese último commit. Este proceso cambia el historial de confirmaciones, por lo que debe utilizarse con cuidado.

Para utilizarlo, ejecute el siguiente comando

$ git pull --rebase <remote-name> <branch-name>

5. git pull Otras opciones

5.1. Opción --No-commit

$ git pull --no-commit

Esta opción se usa cuando quieres comprobar de nuevo los resultados del git pull o añadir algunas manipulaciones. Esta opción detendrá el proceso git pull justo antes de confirmar. En este punto puedes añadir cualquier nueva operación que desees, y luego confirmar manualmente para completar el comando pull.

5.2. La opción --ff-only

$ git pull --ff-only

Esta opción fuerza a que el pull se complete sólo en una situación de avance rápido, de lo contrario el pull será descartado. Con esta opción puedes garantizar que tu rama local no será modificada, ni siquiera accidentalmente, y que sólo la rama remota será copiada completamente.

5.3. opciones -depth

git pull --depth [depth-number]

Esta opción, que también se encuentra en muchos otros comandos, te permite extraer sólo el número de confirmaciones que desees. Si no necesitas todo el historial de commits de una rama remota, esto puede ahorrarte sobrecarga, espacio en disco, etc.

5.4. Opción --Prune

$ git pull --prune

Esta opción se utiliza para limpiar ramas locales que siguen ramas que no existen actualmente en el repositorio remoto. Si estás seguro de que el repositorio remoto es la fuente de la verdad, puedes usar esta opción para mantener tu entorno Git local más limpio.

5.5. Opción --autostash

$ git pull --autostash

Esta opción almacenará automáticamente, o guardará temporalmente, los cambios que estés haciendo y continuará con el pull. Los cambios almacenados volverán automáticamente una vez finalizado el pull. Esto puede ser útil si usted necesita tirar antes de confirmar.

6. Reflexiones finales

El comando git pull es uno de los comandos más importantes para sincronizar repositorios remotos y locales. Una de las maneras más fáciles de solucionar problemas cuando se utiliza el comando git pull es pensar siempre en un pull como un fetch y un merge o rebase como dos pasos separados.

Para una explicación más detallada del comando git merge, ver este post.

copyright for git pull

© 2023 All rights reserved.