Deshacer conflictos de Git Stash Pop

Ankit Raj Goyal 20 junio 2023
  1. Conflictos de combinación de Git Stash Pop: el problema
  2. Deshacer Git Stash Pop con conflictos - Abortar las malas fusiones para volver a un estado limpio
  3. Deshacer Git Stash Pop resolviendo los conflictos malos
Deshacer conflictos de Git Stash Pop

Puede deshacer git stash pop con conflictos de combinación con las soluciones de este artículo. Le mostramos cómo abortar la operación bad stash pop y volver a un estado limpio.

Pero también demostramos un método para resolver los conflictos y deshacer git stash pop con nuevas fusiones buenas.

Conflictos de combinación de Git Stash Pop: el problema

Es común en el flujo de trabajo acelerado de un desarrollador ocultar el estado actual y pasar a otras funciones a medida que surgen nuevas ideas.

Cuando terminamos nuestro trabajo en la nueva función, aplicamos los cambios guardados con el comando git stash pop. Pero a veces, este flujo de trabajo de ida y vuelta da como resultado conflictos de combinación.

Es posible que desee hacer una de dos cosas en tal situación.

  1. Cancele las fusiones incorrectas y vuelva al estado de limpieza anterior.
  2. Es posible que desee editar los archivos/directorios localmente o extraerlos de un repositorio remoto para resolver los conflictos de fusión. A continuación, puede fusionar los cambios correctos con nuevas confirmaciones.

Veamos ambas soluciones.

Deshacer Git Stash Pop con conflictos - Abortar las malas fusiones para volver a un estado limpio

Debe usar cualquiera de los siguientes comandos si desea eliminar los cambios en la operación pop de alijo incorrecto. Estos métodos anularán todos los cambios que causaron el conflicto de combinación y volverán al estado anterior.

restablecer git --merge

Primero, veamos la configuración. Tenemos una rama maestra con algunos archivos, así:

configuración inicial de la rama maestra

Luego bifurcamos una rama local new_branch desde allí. Modificamos algunos archivos en esta rama y confirmamos esos cambios.

nueva configuración inicial de la sucursal

Ahora hacemos algunos cambios en file1.txt y file2.txt. Luego “guardamos” estos cambios.

git stash -u -m "Modify file1 and file2 in new_branch"

El alijo de git tiene algunas opciones aquí. La bandera -u nos permite ocultar los cambios sin seguimiento.

La bandera -m tiene el mismo significado: nos permite agregar un mensaje semántico a nuestro alijo.

alijo en nueva sucursal

Ahora hacemos algunos cambios en el mismo archivo1.txt y archivo2.txt en nuestra rama maestra. Estos archivos tienen diferentes versiones en nuestro maestro y nueva_sucursal.

modificar archivos maestros después de la bifurcación

Si queremos aplicar el alijo en la rama maestra, estas diferentes versiones de archivo1 y archivo2 causarán conflictos.

Conflictos de git stash pop

Si ahora revisamos nuestro repositorio, encontramos archivos extraños debido al mal intento de fusión.

git stash pop conflictos comportamiento extraño

Podemos usar el comando restablecer con algunas opciones para deshacer pop fallido de git.

git reset --merge

El git reset ha aprendido recientemente la opción --merge. La opción --merge es como la opción predeterminada --mixed, pero solo se aplica a los archivos afectados por la operación de fusión.

Vemos que el resultado de este comando es git undo bad stash pop en nuestro caso.

combinación de restablecimiento de git

git pago -f

Podemos ver el mismo resultado anterior usando el comando git checkout al pasar el indicador -f.

git checkout -f

Sin ningún argumento, el comando git checkout toma el argumento predeterminado HEAD. Nuestro último compromiso fue bueno sin los conflictos de combinación de stash pop incorrectos, por lo que este comando hace borrón y cuenta nueva.

La bandera -f es para la opción --force. Ayuda al ignorar las confirmaciones no fusionadas y los archivos sin seguimiento para garantizar un estado de repositorio saludable.

opción de fuerza de pago de git

Los dos métodos anteriores son los mejores para deshacer git stash pop con conflictos si solo desea limpiarlos.

Pero si desea resolver las confirmaciones con fusiones nuevas y buenas, debe usar los métodos a continuación.

Deshacer Git Stash Pop resolviendo los conflictos malos

Necesita editar sus archivos y directorios bien sincronizados en todas las ramas para resolver conflictos.

Puede hacer esto localmente con algunos comandos o extraerlo de su repositorio remoto. Veremos ambas soluciones.

Resolver conflictos para Git Undo Failed Stash Pop - Para sucursales locales

Tenemos la misma configuración que la anterior. Pero esta vez, resolveremos los conflictos entre nuestro main y new_branch y volveremos a aplicar nuestro alijo para obtener el resultado deseado.

Primero eliminamos los cambios en nuestros archivos que causan los conflictos de almacenamiento oculto. El cambio que hicimos en archivo1 y archivo2 en nuestro maestro después de la bifurcación causó el problema.

Restablecemos nuestro maestro al compromiso antes del compromiso con los cambios incorrectos en nuestro archivo1 y archivo2.

git reset <good_commit_hash>

git restablecer mala confirmación

git checkout HEAD .

También hacemos retroceder nuestra área de trabajo con el comando checkout. Tenga en cuenta el punto final ., que selecciona todos los archivos para garantizar que se resuelvan todos los conflictos.

También podrías usar:

git reset HEAD file1.txt file2.txt

Porque en nuestro caso, sabemos que los dos archivos relevantes son file1.txt y file2.txt.

De esta forma, el comando git checkout configura el área de trabajo para que se alinee con HEAD, la última confirmación correcta sin conflictos.

cabeza de pago de git

Ahora vemos que la confirmación se ha ido de nuestra rama maestra.

mal compromiso ido configuración local

Ahora aplicamos nuestros cambios ocultos con éxito.

git stash pop

git buen escondite pop

resolución exitosa aplicar alijo

Git Undo Bad Stash Pop: resuelva conflictos extrayéndolos del repositorio remoto

Si su flujo de trabajo está configurado de tal manera que el repositorio remoto tiene el estado menos saludable, puede resolver los conflictos de almacenamiento incorrecto accediendo desde el control remoto.

Primero configuremos un caso de uso concreto para esta solución.

control remoto saludable

maestro local detrás del control remoto

Vemos que nuestro control remoto local está detrás de nuestro control remoto principal por 1 confirmación. Supongamos que ahora creamos una nueva rama local que rastrea al maestro remoto y guardamos algunos cambios.

git fetch --all

git switch -c new_branch_tracking_remote_master origin/master

maestro remoto de seguimiento de sucursal local

Guardamos algunos cambios en esta rama.

git stash -m "Change file5.txt in local branch"

maestro remoto de seguimiento local oculto

Ahora nos damos cuenta de que queremos estos cambios en una nueva sucursal local. Bifurcamos una nueva sucursal local de nuestro maestro local.

git checkout master

git branch local_branch_2

nuevo tenedor del maestro local

Vemos que esta rama está atrasada por 1 confirmación y no tiene el archivo file5.txt. Si ahora hacemos estallar nuestro alijo, se producirán conflictos de combinación incorrectos.

mal flujo de trabajo remoto git pop

Para resolver conflictos, en este caso, llevamos el maestro remoto a nuestro maestro local. Primero necesitamos buscar el repositorio remoto.

git fetch --all

Luego fusionamos nuestro maestro local con el maestro remoto.

git merge origin/master

extraer el maestro local del control remoto

Ahora vemos que nuestro maestro local está sincronizado con el maestro remoto al extraer los últimos cambios. También puede ver que tiene el file5.txt crucial.

maestro local actualizado

Ahora rebase nuestra sucursal local, local_branch_2, en el maestro local actualizado.

Primero, checkout en la sucursal local.

git checkout local_branch_2

Ahora, rebase en el maestro local.

git rebase master

Esto hace que nuestro local_branch_2 esté saludable y listo para recibir los cambios ocultos.

rebase local en maestro

Ahora aplicamos nuestros cambios ocultos.

git stash pop

Vemos esta vez que los cambios ocultos se aplican con éxito.

Configuración remota exitosa de git stash pop

Hemos resuelto los conflictos y fusionado con éxito los cambios ocultos.

éxito de la configuración remota de git stash pop

Recursos:

  1. https://melvingeorge.me/blog/abort-git-stash-process-if-merge-conflicts-git
  2. https://www.theserverside.com/video/How-to-easily-merge-and-resolve-git-stash-pop-conflicts
  3. https://melvingeorge.me/blog/abort-git-stash-process-if-merge-conflicts-git
  4. https://newbedev.com/git-stash-blunder-git-stash-pop-and-ended-up-with-merge-conflicts
  5. https://stackoverflow.com/questions/4778882/how-to-launch-and-edit-a-file-from-git-using-notepad

Artículo relacionado - Git Stash