2012-05-07 15 views
8

Tengo un problema grave tratando de hacer git rebase --interactive en mi repositorio. Obtengo el error críptico fatal: ref HEAD is not a symbolic ref, y mi rebase deja de funcionar. Debo git rebase --abort para volver a un buen estado.No puedo volver a ajustar la base de datos --interactivo

Éstos son la salida (s) recibo: https://gist.github.com/d38f1e2d2ec9bc480b6f

Lo que me han dicho en el pasado es que esto se debe al hecho de que estoy en la "cabeza separada" el modo, pero ¿cómo ¿He entrado en la rebase en primer lugar si estuviera en ese modo? Sin duda, estoy comenzando en master, luego ejecuto git rebase --interactive y modifico el archivo de texto git-rebase-todo a lo que deseo. Y luego ocurre este error.

He preguntado a todos aquí en el trabajo, y algunas personas @ #git en freenode. Nadie parece entender realmente mi problema ni saber cuál es la solución. Google para ese error no produjo nada, las búsquedas relevantes en StackOverflow no han probado nada. Parece que no puedo resolver esto, y es realmente cojo pasar de aplastar cada compromiso que empujo a maestro hasta ahora empujar cada pequeño cambio que hago como su propio compromiso por separado.

+0

Se reescribe una subserie exitosa -i aquí: http://davidstechtips.com/2011/03/collapsing-commits-in-git/. En tu caso, prueba con 'git checkout master ', como '8bbfbba' ¿quizás? O no hiciste un 'git rebase --continue' después de un conflicto? – VonC

+1

Podría ser que todavía estás dentro de una base de datos anterior que separa la cabeza durante su reprocesamiento. Esto puede suceder fácilmente durante una gran rebase en el momento de arreglar el paso interactivo actual y te podrías haber distraído. Acabo de trabajar en una base de datos en la que tuve que trabajar mucho (muchos pequeños pasos), pero terminé haciendo una 'rebase -i' por cada paso para no perderme. Disparar el visualizador git-gui y gitk también ayudará. [asegúrese de que está comenzando en una de sus sucursales locales] –

+0

Puede establecer si se encuentra realmente en el modo HEAD desconectado al mirar el contenido de '.git/HEAD' si contiene texto como" ref: refs/heads/... "no estás" en el modo HEAD desconectado. Si, por otro lado, contiene una SHA-ID (por ejemplo, una cadena de letras y números), estás en el modo HEAD desconectado. –

Respuesta

3

Durante un 'git rebase', se revisa la referencia de la que se está rebasando. Si esa referencia es una confirmación, obtendrás una cabeza separada; si es una referencia de sucursal, entonces esa rama está desprotegida. Si durante el curso de una confirmación se produce una FATAL, entonces se queda con un directorio de trabajo en estado de munición. Por ejemplo, si estuviste en la sucursal Foo e intentaste volver a establecer la base fuera de Bar, entonces después de una FATAL estarás en Bar o en algún lugar después de Bar con algunas correcciones de rebase aplicadas. Te recuperas mirando a Foo como simplemente.

git rebase --abort 

o, si el rebase está muy encajada (véase la referencia más abajo), como:

git checkout -f Foo 

Después de eso, se puede tratar con seguridad el rebase de nuevo para tratar de depurar por qué se produce la FATAL. Here es un caso donde falla la rebase cuando se está quedando sin memoria y 'git rebase --abort' no funciona.

+1

Usar 'git checkout -f' no resuelve mi problema. He estado haciendo 'git rebase --abort' para salir de la rebase cada vez. Esto es lo que obtengo cuando intento 'git checkout -f': https://gist.github.com/4d3aa867602f1e438e9b – tubbo

+0

Esto se debe a mi uso de' git-tracker'. ¡¡Lo siento!! – tubbo

+0

El uso de 'git rebase --abort' es el enfoque preferido; pero no siempre funciona (ver referencia) – GoZoner

Cuestiones relacionadas