2011-01-25 35 views
107

Tengo una rama de un repositorio público y yo estoy tratando de actualizar mi rama con las confirmaciones de corriente desde el repositorio original:git rebase fatal: Se necesita una única revisión

$ git fetch <remote> 
remote: Counting objects: 24, done. 
remote: Compressing objects: 100% (20/20), done. 
remote: Total 20 (delta 12), reused 0 (delta 0) 
Unpacking objects: 100% (20/20), done. 
From git://github.com/path_to/repo 
    9b70165..22127d0 master  -> $/master 
$ git rebase <remote> 
fatal: Needed a single revision 
invalid upstream <remote> 

El <remote> es en lugar de mi nombre remoto y no es realmente mi nombre remoto. La documentación sobre este error parece estar un poco suelta.

+2

Recibí este error por un motivo no relacionado, usando "git rebase --interactive c4e9c94 ^" desde un símbolo del sistema de Windows. Me impulsó a "¿Más?" Y, independientemente de cómo contestó el mensaje, decía "fatal: necesitaba una única revisión". Pero cuando ejecuté el mismo comando desde bash, funcionó bien. –

+0

Como nota al margen, para mí además de tener una rama ascendente listada con "remota" tuve que buscar la rama específica en la que quería volver a establecer la base. "git fetch master". Obteniendo solo con "git fetch " todavía me daría este error. – Sweetness

Respuesta

88

Debe proporcionar el nombre de una bifurcación (u otro identificador de confirmación), no el nombre de un control remoto en git rebase.

Ej:

git rebase origin/master 
no

:

git rebase origin 

Nota, aunque origin debe resolverse en la que el árbitro origin/HEAD cuando se usa como un argumento en el que se requiere una referencia comprometerse, parece que no todas las el repositorio gana tal referencia por lo que puede no funcionar (y en su caso no). Vale la pena ser explícito.

+1

Esto último debería funcionar: el 'origen' en contexto ref se interpreta como' origen/HEAD'. He visto repositorios que terminaron sin saber qué es 'origin/HEAD', aunque ... – Cascabel

+1

@Jefromi: me temo que no te creo, acabo de probar 'git rebase origin' en un repositorio de prueba (donde' origin' tiene 'HEAD') y obtengo el error de OP. La documentación para rebase no dice que un nombre remoto sea válido para ''. –

+1

@Charles: Bueno, puede ser un error? 'git rev-parse origin' funciona, al igual que' git rebase origin' en mi clon git.git (en el caso de rebase actual, de avance rápido y true, incluido el interactivo). – Cascabel

9

El problema es que usted se bifurcó en una bifurcación de .... donde está intentando volver a establecer la base. No puede volver a establecer una base en una bifurcación que no contenga la confirmación en la que se creó originalmente su bifurcación actual.

Tengo esto cuando por primera vez rebasada una rama local X a un empujado un Y, a continuación, trató de rebasar una rama (creado por primera vez en X) a la empujados uno Y.

Resuelto para mí por rebase a X

No tengo problema para volver a realizar el control de las ramas remotas (posiblemente ni siquiera desprotegido), siempre que mi rama actual se deriva de un antecesor de esa rama.

+3

Puede volver a establecer una base para tal rama con '--onto'. Todo desciende de * algún * antecesor común (para repositorios normales), por lo que ese no es el problema. Obtuve este error al tratar de volver a establecer la base en 'foo' cuando aún no había creado la rama para rastrear' origin/foo'. – cdunn2001

18

Compruebe que deletreó el nombre de la rama correctamente. Estaba redefiniendo una rama de la historia (es decir, branch_name) y olvidé la parte de la historia. (es decir, story/branch_name) y luego me escupe este error, lo cual no tenía mucho sentido en este contexto.

+0

Exactamente esto. Mecanografiado 'featureName' cuando la rama se nombra realmente' features/featureName' – pkamb

+2

También una buena idea para buscar errores tipográficos más a fondo. Accidentalmente cambié dos letras al crear una rama y este error fue muy difícil de detectar. – Olga

0

Para remota origin:

$ echo "ref: refs/remotes/origin/master" > .git/refs/remotes/origin/HEAD 
13

me encontré con esto y se dio cuenta de que no buscar el aguas arriba antes de tratar de rebasar. Todo lo que necesitaba era git fetch upstream

-1

Estaba escribiendo erróneamente git rebase cuando me refería a git bisect. ¡Asegúrate de estar usando el comando que estás esperando!