rebase en progreso. No se puede comprometer. ¿Cómo proceder o detener (abortar)?

139

Cuando corro:

git status

Veo esto:

rebase in progress; onto 9c168a5
You are currently rebasing branch 'master' on '9c168a5'.
(all conflicts fixed: run "git rebase --continue")
nothing to commit, working directory clean

Cuando lo hago:

ls `git rev-parse --git-dir` | grep rebase || echo no rebase

Ya veo: rebase-apply

No puedo comprometerme con el origen.

git branch

Muestra:

* (no branch, rebasing master)
  develop
  master

Estoy atascado. ¿No se que hacer? ¿Realmente toma tanto tiempo para rebase? git rebase --continueno hace nada No tengo nada en estado git. Solo estoy esperando el rebase. ¿Que puedo hacer?

UDATE: esta es la salida de: git rebase --continue

Applying: no message
No changes - did you forget to use 'git add'?
If there is nothing left to stage, chances are that something else
already introduced the same changes; you might want to skip this patch.

When you have resolved this problem, run "git rebase --continue".
If you prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort".

git add. tiene nada.

Joseph Chambers
fuente

Respuestas:

255

Rebase no sucede en segundo plano. "rebase en progreso" significa que usted inició un rebase y el rebase fue interrumpido debido a un conflicto. Debe reanudar el rebase ( git rebase --continue) o abortarlo ( git rebase --abort).

Como git rebase --continuesugiere el mensaje de error de , le pediste a git que aplique un parche que resulta en un parche vacío. Lo más probable es que esto signifique que el parche ya se aplicó y que desea soltarlo usando git rebase --skip.

Matthieu Moy
fuente
Actualicé la publicación para incluir git rebase: continúe según su solicitud.
Joseph Chambers
2
OK, entonces "rebase - continuar no hace nada" era inexacto. Debería haber escrito "git rebase: continúe los errores de la siguiente manera ..." para obtener ayuda.
Matthieu Moy
3
La documentación de esto es muy mala, sigue repitiendo que 'git rebase --continue' y terminará de una manera infinita de decir eso.
Jean-Paul
66
git rebase --skip lo hizo!
Borzh
Como esta es una pregunta para principiantes relativos (como yo), pensé que valía la pena mencionar toda esta charla sobre ejecutar esto o aquello: requiere abrir una nueva terminal y volver al repositorio ... nada funcionaría en mi caso de este problema sin haciendo eso,
Kdean571
10

Me quedé atrapado en el 'estado de rebase', me quedé

On branch master
Your branch is up to date with 'origin/master'.

You are currently rebasing.
  (all conflicts fixed: run "git rebase --continue")

nothing to commit, working tree clean

pero corriendo git rebase --skipcedió error: could not read '.git/rebase-apply/head-name': No such file or directory.

Correr rm -fr ".git/rebase-apply"ayudó.

Nota: por supuesto, hágalo solo si no le importa el rebase o si está atrapado en un rebase anterior que ya no desea.

ojos salvajes
fuente
8
  • Paso 1: sigue adelante git rebase --continue

  • Paso 2: arregle los CONFLICTOS y luego git add .

  • Regrese al paso 1, ahora si dice no changes .., ejecute y git rebase --skipluego regrese al paso 1

  • Si solo desea salir de la ejecución de rebase git rebase --abort

  • Una vez que todos los cambios estén listos, ejecute git commit -m "rebase complete"y listo.

Ani Menon
fuente
6

Le dijiste a tu repositorio que rebase. Parece que estaba en una confirmación (identificada por SHA 9c168a5) y luego hizo git rebase mastero git pull --rebase master.

Estás volviendo a crear la rama maestra en esa confirmación. Puede finalizar el rebase a través de git rebase --abort. Esto volvería al estado en el que se encontraba antes de comenzar a rebasear.

Schleis
fuente
Yo nunca hago a git rebase/pull --rebase master. A menudo termino en este estado ... debido a un conflicto. Modifico un archivo, hago una extracción, restauro mis cambios y el nuevo parche está vacío, lo que daña el cerebro de Git, que luego decide ingresar a este "modo de rebase" ...
Alexis Wilke
6

Entré en este estado recientemente. Después de resolver conflictos durante una nueva versión, cometí mis cambios, en lugar de ejecutarlos git rebase --continue. Esto produce los mismos mensajes que vio cuando ejecutó sus comandos git statusy git rebase --continue. Resolví el problema ejecutando git rebase --aborty luego volviendo a ejecutar el rebase. Probablemente también se podría omitir el rebase, pero no estaba seguro de en qué estado me dejaría.

$ git rebase --continue
Applying: <commit message>
No changes - did you forget to use 'git add'?
If there is nothing left to stage, chances are that something else
already introduced the same changes; you might want to skip this patch.

When you have resolved this problem, run "git rebase --continue".
If you prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort".

$ git status
rebase in progress; onto 4df0775
You are currently rebasing branch '<local-branch-name>' on '4df0775'.
  (all conflicts fixed: run "git rebase --continue")

nothing to commit, working directory clean
jsears
fuente
Además de --abort(+1), ahora tiene --quit( stackoverflow.com/a/41363262/6309 )
VonC
Después de arreglar los conflictos. entonces llame a git commit. haz otro trabajo, luego llama a git commit nuevamente. Si usa este método git rebase --abort, todo el trabajo que está haciendo después de cometer un conflicto será eliminado. Así que ten cuidado
Jin
3

Si git rebase --abortno funciona y sigues teniendo

error: no se pudo leer '.git / rebase-apply / head-name': no ​​existe tal archivo o directorio

Tipo:

git rebase --quit
Panda-313
fuente
0

Puedo configurar mi gita autorebase en unagit checkout

# in my ~/.gitconfig file
[branch]
    autosetupmerge = always
    autosetuprebase = always

De lo contrario, se fusiona automáticamente cuando cambias entre ramas, lo que creo que es la peor opción posible como predeterminada.

Sin embargo, esto tiene un efecto secundario, cuando cambio a una rama y luego git cherry-pick <commit-id>termino en este estado extraño cada vez que tiene un conflicto.

De hecho, tengo que abortar rebase, pero primero soluciono el conflicto, git add /path/to/fileel archivo (¡¿otra forma muy extraña de resolver el conflicto en este caso ?!), luego hago un git commit -i /path/to/file. Ahora puedo abortar el rebase:

git checkout <other-branch>
git cherry-pick <commit-id>
...edit-conflict(s)...
git add path/to/file
git commit -i path/to/file
git rebase --abort
git commit .
git push --force origin <other-branch>

El segundo git commit .parece provenir del aborto. Arreglaré mi respuesta si descubro que debo abortar rebaseantes.

Se --forcerequiere la activación si omite otras confirmaciones y ambas ramas no son suaves (faltan confirmaciones de la otra).

Alexis Wilke
fuente
"De lo contrario, se fusiona automáticamente cuando cambias entre ramas" - Um, no. Git no hace ningún tipo de fusión o rebase cuando cambias de rama. autosetupmergetiene que ver con cómo git pullse configura para nuevas sucursales.
Marnen Laibow-Koser
En este momento, cuando estaba luchando con ese problema, seguro que algún tipo de fusión de varios códigos. Mi configuración actual parece omitir ese problema. También existe el problema de no haber hecho un commit + push de su rama actual antes de intentar cambiar.
Alexis Wilke
Git le dirá si sus cambios no comprometidos evitarían el cambio de ramas, por lo que no hay mucho de qué preocuparse, ¿verdad? ¿O estás hablando de otra cosa?
Marnen Laibow-Koser
0

Otra opción para ABORTAR / SALTAR / CONTINUAR desde IDE

VCS> Git> Abortar Rebasing

ingrese la descripción de la imagen aquí

Prabs
fuente
0

El mío fue un error que apareció de BitBucket. Ran lo git am --skiparregló.

Kevin Aung
fuente