Deshacer conflictos de Git Stash Pop
- Conflictos de combinación de Git Stash Pop: el problema
- Deshacer Git Stash Pop con conflictos - Abortar las malas fusiones para volver a un estado limpio
- Deshacer Git Stash Pop resolviendo los conflictos malos
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.
- Cancele las fusiones incorrectas y vuelva al estado de limpieza anterior.
- 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í:
Luego bifurcamos una rama local new_branch
desde allí. Modificamos algunos archivos en esta rama y confirmamos esos cambios.
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.
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
.
Si queremos aplicar el alijo en la rama maestra
, estas diferentes versiones de archivo1
y archivo2
causarán conflictos.
Si ahora revisamos nuestro repositorio, encontramos archivos extraños debido al mal intento de fusión.
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.
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.
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 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.
Ahora vemos que la confirmación se ha ido de nuestra rama maestra
.
Ahora aplicamos nuestros cambios ocultos con éxito.
git stash pop
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.
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
Guardamos algunos cambios en esta rama.
git stash -m "Change file5.txt in local branch"
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
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.
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
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.
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.
Ahora aplicamos nuestros cambios ocultos.
git stash pop
Vemos esta vez que los cambios ocultos se aplican con éxito.
Hemos resuelto los conflictos y fusionado con éxito los cambios ocultos.
Recursos:
- https://melvingeorge.me/blog/abort-git-stash-process-if-merge-conflicts-git
- https://www.theserverside.com/video/How-to-easily-merge-and-resolve-git-stash-pop-conflicts
- https://melvingeorge.me/blog/abort-git-stash-process-if-merge-conflicts-git
- https://newbedev.com/git-stash-blunder-git-stash-pop-and-ended-up-with-merge-conflicts
- https://stackoverflow.com/questions/4778882/how-to-launch-and-edit-a-file-from-git-using-notepad