Git Force Pull

Azhar Bashir Khan 6 febrero 2022
Git Force Pull

En este tutorial, aprenderemos a extraer cambios del repositorio remoto con fuerza en Git.

A veces, es posible que necesitemos descartar las modificaciones locales y reemplazarlas con actualizaciones del repositorio remoto en un entorno de desarrollo colaborativo.

Usamos el comando git pull para obtener los cambios del repositorio remoto a la rama local en el repositorio local.

El comando git pull tendrá éxito solo si los cambios en la rama local están detrás de los cambios en el repositorio remoto.

Si la rama local y los cambios del repositorio remoto han divergido y si deseamos descartar los cambios locales, debemos hacer un git pull forzado para sobrescribir los cambios locales,

Ahora lo desarrollaremos con un ejemplo.

Uso de git fetch, git reset y git merge para hacer una extracción contundente de los cambios remotos en Git

El comando git pull no es una sola operación. El comando git pull ejecuta el comando a saber. git fetch ​​para obtener los datos del repositorio remoto, y luego el comando git merge para fusionar esos cambios en el repositorio local.

El comando git pull ejecuta los dos comandos de la siguiente manera.

$ git fetch
$ git merge origin/$CURRENT_BRANCH

El comando git fetch ​​descarga los últimos cambios del repositorio remoto. No hace ninguna merge o rebase del repositorio local.

El comando git merge anterior fusiona los cambios del repositorio remoto, proporcionados por el alias origin, que se han agregado a $CURRENT_BRANCH, que aún no están presentes en la rama local en el repositorio local.

Por lo tanto, el git pull fallará si la rama local en el repositorio local es divergente de la rama en el repositorio remoto.

Es posible que hayamos realizado algunos cambios locales en los archivos del árbol de trabajo de la rama local. Por lo tanto, esto hace que el git pull falle.

Ahora podemos decidir descartar los cambios locales a favor de los cambios en el repositorio remoto.

Por lo tanto, debemos extraer los cambios con fuerza que sobrescribirán las modificaciones locales.

Necesitamos hacer lo siguiente para lograr un tirón contundente de los cambios remotos.

$ git fetch
$ git reset --hard HEAD
$ git merge origin/$CURRENT_BRANCH

El comando git reset con la opción --hard restablecerá la rama a lo que acabamos de buscar. También descartará cualquier cambio local en los archivos rastreados y los archivos que no se rastrean se eliminarán.

Por lo tanto, use esto con precaución, ya que se perderán los cambios locales.

Alternativamente, podemos guardar los cambios locales antes de extraer los cambios. Podemos ocultar los cambios usando git stash junto con la extracción de los cambios.

Podemos hacer lo siguiente.

$ git fetch
$ git stash
$ git merge origin/$CURRENT_BRANCH
$ git stash pop

Así, cuando usamos git stash, ya no necesitamos hacer un git reset de la rama local del repositorio local.

Usamos el git stash pop para obtener cambios locales del alijo.

Artículo relacionado - Git Pull