git rebase fatal: precisava de uma única revisão

162

Eu tenho uma ramificação de um repositório público e estou tentando atualizar minha ramificação com as confirmações atuais do repositório 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>

Ele <remote>está no lugar do meu nome remoto e não é realmente o meu nome remoto. A documentação deste erro parece um pouco solta.

jrlmx2
fonte
2
Eu recebi esse erro por um motivo não relacionado - usando "git rebase --interactive c4e9c94 ^" em um prompt de comando do Windows. Ele me levou a "Mais?" E, independentemente de como respondeu ao prompt, disse "fatal: precisava de uma única revisão". Mas quando executei o mesmo comando do bash, funcionou bem.
Richard Beier
Como uma observação lateral, para mim, além de ter uma ramificação upstream listada como "remota", tive que buscar a ramificação específica na qual queria refazer a recuperação. "git fetch <upstream> mestre". Buscar apenas <upstream> com "git fetch <upstream>" ainda me causaria esse erro.
Doçura

Respostas:

132

Você precisa fornecer o nome de uma ramificação (ou outro identificador de confirmação), não o nome de um controle remoto git rebase.

Por exemplo:

git rebase origin/master

não:

git rebase origin

Observe que, embora origindeva resolver para o ref origin/HEADquando usado como argumento em que uma referência de confirmação é necessária, parece que nem todo repositório obtém essa referência, portanto, ele pode não funcionar (e no seu caso não funciona). Vale a pena ser explícito.

CB Bailey
fonte
2
Este último deve realmente funcionar - originno contexto ref é interpretado como origin/HEAD. Eu vi repositórios acabam por não saber o que origin/HEADé, no entanto ...
Cascabel
1
@ Jeffromi: Receio não acreditar em você, tentei apenas git rebase originum repositório de teste (onde origintem um HEAD) e recebo o erro do OP. A documentação para rebase não diz que um nome remoto é válido para o <upstream>.
CB Bailey
1
@ Charles: Bem, pode ser um bug? git rev-parse originfunciona, assim como git rebase originno meu clone git.git (em caso de rebase atualizado, de avanço rápido e verdadeiro, inclusive interativo).
Cascabel
@Jefromi: Can você git describeo seuHEAD ?
CB Bailey
@ Charles: atualizado, v1.7.4-rc3! Eu não sou terrivelmente ansiosos para fazer uma bisect procurando um presente ...
Cascabel
28

Verifique se você digitou o nome da filial corretamente . Eu estava refazendo um ramo da história (ie branch_name) e esqueci a parte da história. (ie story/branch_name) e o git cuspiu esse erro para mim, que não fazia muito sentido nesse contexto.

ChrisJF
fonte
Exatamente isso. Digitado featureNamequando o ramo é na verdade o nomefeatures/featureName
pkamb
3
Também é uma boa idéia procurar erros de digitação mais detalhadamente. Eu acidentalmente troquei duas letras ao criar ramificação e esse erro de digitação foi realmente difícil de detectar.
Olga
25

Eu me deparei com isso e percebi que não havia buscado a montante antes de tentar me recuperar. Tudo que eu precisava eragit fetch upstream

Mario Olivio Flores
fonte
10

O problema é que você ramificou uma ramificação de .... para onde está tentando se recuperar. Você não pode refazer a recuperação para uma ramificação que não contém a confirmação na qual a ramificação atual foi criada originalmente.

Eu obtive isso quando reformulei um ramo local X pela primeira vez para um Y enviado por push e tentei rebase um ramo (criado pela primeira vez em X) para o Y enviado por envio.

Resolvido para mim, alterando para X.

Não tenho nenhum problema ao refazer a ramificação remota (potencialmente nem check-out), desde que minha ramificação atual se origine de um ancestral dessa ramificação.

Maitreya
fonte
3
Você pode mudar para um ramo com --onto. Tudo descende de algum ancestral comum (para repositórios normais), então esse não é o problema. Recebi esse erro ao tentar fazer uma nova recuperação fooquando ainda não havia criado o ramo a ser rastreado origin/foo.
precisa saber é o seguinte
0

Para controle remoto origin:

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

git submodule deinit --all -f trabalhou para mim.

Deepesh Panjabi
fonte