git rebase fatal: necesitaba una sola revisión

162

Tengo una rama de un repositorio público y estoy tratando de actualizar mi rama con las confirmaciones actuales del repositorio original:

$ 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>está en lugar de mi nombre remoto y en realidad no es mi nombre remoto. La documentación sobre este error parece estar un poco floja.

jrlmx2
fuente
2
Recibí este error por una razón no relacionada: usar "git rebase --interactive c4e9c94 ^" desde un símbolo del sistema de Windows. Me provocó "¿Más?", E independientemente de cómo respondió el mensaje, dijo "fatal: necesitaba una sola revisión". Pero cuando ejecuté el mismo comando desde bash, funcionó bien.
Richard Beier el
Como nota al margen, para mí, además de tener una rama ascendente en la lista con "remoto", tuve que buscar la rama específica en la que quería hacer un rebase. "git fetch <upstream> master". Obtener solo <upstream> con "git fetch <upstream>" aún me daría este error.
Dulzura

Respuestas:

132

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

P.ej:

git rebase origin/master

no:

git rebase origin

Tenga en cuenta que, aunque origindebería resolver la referencia origin/HEADcuando se usa como un argumento donde se requiere una referencia de confirmación, parece que no todos los repositorios obtienen dicha referencia, por lo que puede no funcionar (y en su caso no funciona). Vale la pena ser explícito.

CB Bailey
fuente
2
Este último debería funcionar, originen contexto de referencia se interpreta como origin/HEAD. Sin origin/HEADembargo, he visto repositorios que no saben qué es ...
Cascabel
1
@Jefromi: Me temo que no te creo, acabo de probar git rebase originun repositorio de prueba (donde origintiene un HEAD) y recibo el error del OP. La documentación para rebase no dice que un nombre remoto sea válido para <upstream>.
CB Bailey
1
@ Charles: Bueno, ¿puede ser un error? git rev-parse originfunciona, al igual que git rebase originen mi clon git.git (en caso de rebase actualizado, avance rápido y verdadero, incluido el interactivo).
Cascabel
@Jefromi: ¿Puedes git describetu HEAD?
CB Bailey
@Charles: actualizado, v1.7.4-rc3! No estoy terriblemente ansioso por hacer una bisecta buscando este ...
Cascabel
28

Verifique que haya escrito correctamente el nombre de la rama . Estaba rebasando una rama de la historia (es decir branch_name) y olvidé la parte de la historia. (es decir story/branch_name) y luego git me escupió este error que no tenía mucho sentido en este contexto.

ChrisJF
fuente
Exactamente esto. Mecanografiado featureNamecuando la rama se llama realmentefeatures/featureName
pkamb
3
También es una buena idea buscar errores tipográficos simples más a fondo. Cambié accidentalmente dos letras al crear una rama y este error tipográfico fue realmente difícil de detectar.
Olga
25

Me encontré con esto y me di cuenta de que no iba a buscar el río arriba antes de intentar rebase. Todo lo que necesitaba eragit fetch upstream

Mario Olivio Flores
fuente
10

El problema es que se bifurcó de una rama de ... donde está tratando de cambiar de base. No puede cambiar el nombre de una rama que no contiene la confirmación en la que se creó originalmente su rama actual.

Obtuve esto cuando volví a fusionar una rama local X a una Y empujada, luego traté de rebase una rama (creada por primera vez en X) a la Y empujada.

Resuelto para mí rebasando a X.

No tengo problemas para volver a cambiar a sucursales remotas (posiblemente ni siquiera desprotegidas), siempre que mi rama actual provenga de un antepasado de esa rama.

Maitreya
fuente
3
Puede cambiar la base a una rama de este tipo con --onto. Todo desciende de algún ancestro común (para repositorios normales), por lo que ese no es el problema. Recibí este error al intentar volver a crear una base foocuando aún no había creado la rama para rastrear origin/foo.
cdunn2001
0

Para control remoto origin:

$ echo "ref: refs/remotes/origin/master" > .git/refs/remotes/origin/HEAD
Jani
fuente
0

git submodule deinit --all -f trabajó para mi.

Deepesh Panjabi
fuente