Forzar la sobreescritura del pull en Git

Abdul Jabbar 6 febrero 2022
  1. Forzar el pull en Git
  2. Mantener commits locales al extraer Git
  3. Mantener los cambios locales al extraer Git
Forzar la sobreescritura del pull en Git

Git es el sistema de control de versiones más popular y exigente en la actualidad. Las interfaces de usuario para Git son similares a otros sistemas de control de versiones. Podemos iniciar sesión, clonar un repositorio y hacer commits.

Sin embargo, Git presenta algunas diferencias notables que lo hacen más complicado que otros sistemas.

Git se distribuye. Cada usuario tiene su repositorio en lugar de que todos los repositorios se almacenen en una única ubicación central. Todo el mundo tiene que hacer una conexión a otro repositorio para usarlo. Es un poco molesto, pero también significa que podemos trabajar en los mismos archivos en diferentes ubicaciones. Podemos trabajar en el mismo proyecto en varios lugares y los cambios se sincronizan.

Estamos aquí para entender cómo sacar con fuerza todos los cambios en la rama local actual de trabajo. De hecho, es posible que nos haya sucedido que tenemos un repositorio de git antiguo que no se ha sincronizado con el remoto con los últimos cambios, y también podemos tener o no las últimas commits remotas, y ahora queremos extraer todo lo último. cambios remotos, y ni siquiera nos importan los cambios locales en el repositorio actual, así que qué hacer en este escenario. La solución para este problema se encuentra a continuación.

Forzar el pull en Git

Con el nombre de comando pull, podemos pensar que podemos usar el comando git pull aquí, pero no es la forma ideal de usar el comando pull en Git. Entonces, hay dos formas de manejar esta situación, una es eliminar el repositorio local actual y hacer un clon nuevamente del mismo repositorio, pero la desventaja es que perdemos nuestros archivos sin seguimiento que ya existen en nuestro repositorio actual.

Primero, ejecutaremos fetch --all como se muestra a continuación.

git fetch --all

Aquí, el comando git fetch ​​descargará lo último desde el control remoto sin fusionar ni reorganizar nada. Luego, después de ejecutar fetch como se indicó anteriormente, si estamos en la rama master, ejecutaremos el siguiente comando para restablecer:

git reset --hard origin/master

Al ejecutar el comando anterior git reset, restablecerá la rama maestra a lo que acabamos de buscar, o si estamos en cualquier otra rama, usaremos el nombre de la rama de la siguiente manera.

git reset --hard origin/<branch_name>

La opción --hard de arriba cambiará todos los archivos en nuestro árbol de trabajo para que coincidan con los archivos en la rama origin/master.

Mantener commits locales al extraer Git

Si queremos mantener los compromisos locales, tenemos que hacer una rama local desde la rama en la que estamos antes de ejecutar el comando reset.

git checkout master
git branch new-backup-branch
git fetch --all
git reset --hard origin/master

Los comandos mencionados anteriormente solo están destinados a usuarios expertos que saben exactamente lo que están haciendo. La advertencia es para los comandos anteriores: solo use los comandos anteriores con cuidado y asegúrese de saber qué significan sus acciones antes de aplicarlos.

Mantener los cambios locales al extraer Git

Tanto los cambios no confirmados como los realizados se perderán cuando ejecutemos el comando reset. Entonces, ¿cuál es la solución para retener esos cambios en el repositorio local?

Si queremos mantener esos cambios, usaremos el comando stash antes de ejecutar el comando de reinicio, y después de realizar el pull, podemos pop los cambios guardados encima de nuestros cambios. Para ello ejecutaremos el siguiente comando:

git stash

Y después de terminar el restablecimiento y la extracción, si queremos volver a aplicar estos cambios ocultos, de esta manera, obtendremos nuestros cambios locales nuevamente en el directorio de trabajo. Usaremos el siguiente comando para recuperar nuestros cambios:

git stash pop
Abdul Jabbar avatar Abdul Jabbar avatar

Abdul is a software engineer with an architect background and a passion for full-stack web development with eight years of professional experience in analysis, design, development, implementation, performance tuning, and implementation of business applications.

LinkedIn

Artículo relacionado - Git Pull