Olvidé "git rebase --continue" e hice "git commit". ¿Como arreglar?


112

Estaba cambiando el código en git, tuve algunos conflictos de fusión. Resolví los conflictos e hice:

git add

En este punto me olvidé de hacer:

git rebase --continue

Seguí codificando e hice:

git commit

por los cambios. Ahora estoy encendido "no branch"y no puedo hacer:

git rebase --continue 

¿Cómo puedo solucionar esto?


# Actualmente no en ninguna sucursal. nada que confirmar (directorio de trabajo limpio)
Abhilash

Respuestas:


5

EDITAR : Mire la respuesta a continuación también para ver si esa es una solución más fácil para usted. https://stackoverflow.com/a/12163247/493106


Tendría que probarlo, pero creo que esto es lo que haría:

  1. Etiquete su última confirmación (o simplemente escriba su SHA1 en algún lugar para no perderlo): git tag temp
  2. git rebase --abort
  3. Haz el rebase de nuevo. Tendrá que resolver la fusión nuevamente. :(
  4. git rebase --continue
  5. git cherry-pick temp

El problema con esto es que su tempconfirmación probablemente contenga tanto la resolución de la fusión como el nuevo código. Así que podría ser complicado, pero lo probaría y vería si funciona.


O puede etiquetar como dice @MatrixFrog o también puede guardarlo como un parche. Luego, aborta el rebase. Verifique el estado para asegurarse de que el repositorio esté en un estado en el que sepa que no tuvo problemas y luego inicie la recuperación y el rebase.
yasouser

17
No hagas esto. Vea la respuesta de kirikaza a continuación para una manera mucho más simple / limpia. No se meta con la selección selectiva y la resolución de conflictos por segunda vez.
tandrewnichols

4
@Abhilash Por favor acepte la respuesta de kirikaza. Yo (al igual que tandrewnichols) hice esto y había una manera mucho más fácil (e Internet parece estar de acuerdo, ya que esa respuesta tiene 4 veces los votos a favor).
David Doria

Ahora son 10 veces los votos a favor ... también, use git rerere para recordar las resoluciones de sus conflictos (útil, a menos que a veces tome malas resoluciones que no quiera que recuerde).
Ajax

216

Solo hazlo git reset --soft HEAD^. Mueve el puntero HEAD a su padre, pero mantiene el árbol de trabajo y agrega el cambio de combinación al índice. Para que pueda continuar reajustando git rebase --continuecomo antes.


1
Esto funcionó totalmente, y también fue la primera vez que encontré un uso para --soft. ¡Es bueno saber cómo funciona, gracias!
mmocny

1
¡Espero que la gente vea todos los votos a favor de esta respuesta y siga lo que se sugiere aquí!
Raghu

1
Esto es exactamente lo que pensé (pero puede que haya pasado con dificultad por accidente). Sin embargo, no estaba seguro de si HEAD se estaba actualizando durante una rebase. ¡Gracias por confirmar! Me alegro de haber avanzado un poco más antes de jugar con el dolor de cabeza de arriba.
DeezCashews

Edité la respuesta aceptada para poner un enlace aquí. No vi esta respuesta hasta que seguí las instrucciones anteriores.
xaxxon

0

Tuve el mismo problema y, para empeorarlo, estaba reajustando tres confirmaciones y, después de resolver los conflictos en la segunda confirmación, "comprometí" en lugar de "reajustar - continuar".

Como resultado tuve este reflog de git

Cuando apliqué la solución de kirikaza, simplemente revirtí la tercera confirmación, y no la segunda, que era problemática.

Como puede ver, el rebase comienza con un checkout desde la rama remotes / origin / master y luego aplica mis tres confirmaciones que aparecen como las tres operaciones anteriores (antes del checkout) en el reflog.

Luego, si desea reiniciar desde una base limpia, antes de la rebase, simplemente puede restablecer el hash de forma completa justo antes de la comprobación de la operación de rebase. En mi caso (ver foto):

git reset --hard 859ed3c

Entonces puedes empezar de nuevo git rebase.


0

Tenía git rebased, solucioné conflictos, git agregó un archivo con conflictos y (por error) cometí.

Probé las soluciones git reset --soft HEAD^y git reset --harddadas, pero ninguna funcionó para mí.

Sin embargo, simplemente git rebase --abortfuncionó: me llevó a antes del inicio de la rebase con un árbol de trabajo limpio.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.