Pasos que realicé:
Tengo dos ramas branch1 y branch2,
$git branch --Initial state
$branch1
$git checkout branch2
$git pull origin branch1 --Step1
Resolví los conflictos e hice un
$git commit -m "Merge resolved"
luego
$git checkout branch1
$git merge branch2
$git push origin branch1
Ahora me di cuenta de que mientras estaba en el paso 1, la fusión automática eliminó un código y se presionó el código de cambio, ahora quiero volver a mi estado inicial para revertir cualquier cambio. ¿Buscas ayuda inmediata?
git
git-revert
Bijendra
fuente
fuente
Respuestas:
Puede revertir la fusión siguiendo la guía oficial , sin embargo, esto deja a Git con la creencia errónea de que las confirmaciones fusionadas todavía están en la rama de destino.
Básicamente tienes que:
fuente
1
. Significa elfirst
padre de merge commit. Pero si uno (hipotéticamente) 'por accidente' fusionó el maestro con la rama, luego el maestro reenvió rápidamente a la confirmación combinada, se debe usar-m 2
para revertir la combinación en el maestro.1
. Echó a perder mi repositorio al revertir parcialmente la fusión, mientras que yo quería revertir la fusión por completo. ¡Terminé revirtiendo la reversión!Intente usar
git reflog <branch>
para averiguar dónde estaba su rama antes de la fusión ygit reset --hard <commit number>
restaurar la revisión anterior.Reflog le mostrará los estados más antiguos de la rama, por lo que puede devolverlo a cualquier conjunto de cambios que desee.
Asegúrese de estar en la rama correcta cuando use git reset
Para cambiar el historial del repositorio remoto, puede hacerlo
git push -f
, sin embargo, esto no se recomienda porque alguien ya puede haber descargado los cambios, impulsados por usted.fuente
La primera opción es el uso de
git revert
.El
git revert
va a revertir los cambios, pero mantendrá la historia. Por lo tanto, no podrá seguir trabajando en la misma rama, ya que ya no podrá ver la diferencia real entre la rama fusionada y la rama de su función. Utilice la siguiente forma para eliminar también el historial. Haga esto con mucho cuidado si y solo si es el único que está presionando cambios en la rama en este momento.fuente
En mi caso, fusioné mi rama (digamos: my-branch) con otra rama de función (feature-branch) pero no master. Entonces, el historial de mi sucursal fue así:
Después de fusionarlo con otro
feature-branch
que tenía confirmacionesf1, f2
sobre el maestro, se volvió así:Esto podría haber sucedido porque mientras trabajaba en mi rama hice una fusión desde la maestra después de 2 confirmaciones, o una de las 2 ramas podría no haber estado actualizada con la maestra. Entonces, en este caso
git revert -m 1
no estaba funcionando, ya que dejaba esosf1
y sef2
compromete en el medio.La solución fue simple, que funcionará en el caso de escenarios normales, donde no tenemos confirmaciones intermedias:
En lugar de 6, utilice el número apropiado según la cantidad de confirmaciones pasadas que desee cambiar. Ahora que el editor de Vim está abierto, simplemente marque las confirmaciones no deseadas como
drop
iguales y salga usando el:wq
registro de verificación:empujar la fuerza
Ahora la rama remota debería estar en estado anterior.
fuente