git rebase fatal: necessaria una sola revisione


162

Ho un ramo di un repository pubblico e sto cercando di aggiornare il mio ramo con gli commit correnti dal repository originale:

$ 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>

Il <remote>è a posto del mio nome a distanza e non è in realtà il mio nome remoto. La documentazione su questo errore sembra essere un po 'allentata.


2
Ho ricevuto questo errore per un motivo non correlato - usando "git rebase --interactive c4e9c94 ^" da un prompt dei comandi di Windows. Mi ha spinto "Altro?", E indipendentemente da come ha risposto al prompt, ha detto "fatale: necessaria una sola revisione". Ma quando ho eseguito lo stesso comando da bash, ha funzionato bene.
Richard Beier,

Come nota a margine, per me oltre ad avere un ramo a monte elencato con "remoto" ho dovuto recuperare il ramo specifico su cui volevo rifare. "git fetch <upstream> master". Recuperare solo <upstream> con "git fetch <upstream>" mi darebbe ancora questo errore.
Dolcezza

Risposte:


133

Devi fornire il nome di un ramo (o altro identificativo di commit), non il nome di un telecomando a git rebase.

Per esempio:

git rebase origin/master

non:

git rebase origin

Nota, sebbene origindovrebbe risolversi con ref origin/HEADquando usato come argomento in cui è richiesto un riferimento di commit, sembra che non tutti i repository ottengano tale riferimento, quindi potrebbe non funzionare (e nel tuo caso non funziona). Vale la pena essere espliciti.


2
Quest'ultimo dovrebbe effettivamente funzionare - originnel contesto ref viene interpretato come origin/HEAD. Ho visto i repository finire per non sapere cosa origin/HEADsia, però ...
Cascabel,

1
@Jefromi: temo di non crederti, ho appena provato git rebase originun repository di test (dove originha una HEAD) e ottengo l'errore del PO. La documentazione per rebase non dice che un nome remoto sia valido per <upstream>.
CB Bailey,

1
@Charles: Beh, potrebbe essere un bug? git rev-parse originfunziona, come git rebase originnel mio clone git.git (in caso aggiornato, di avanzamento rapido e di vero rebase, incluso interattivo).
Cascabel,

@Jefromi: puoi essere git describetuo HEAD?
CB Bailey,

@Charles: aggiornato, v1.7.4-rc3! Non sono terribilmente ansioso di fare una bisect cercando questo ...
Cascabel,

28

Verifica di aver digitato correttamente il nome del ramo . Stavo riformando un ramo della storia (cioè branch_name) e ho dimenticato la parte della storia. (ie story/branch_name) e poi git mi ha sputato questo errore che non aveva molto senso in questo contesto.


Esattamente questo. Digitato featureNamequando il ramo è effettivamente chiamatofeatures/featureName
pkamb

3
È anche una buona idea cercare i semplici errori di battitura in modo più approfondito. Ho scambiato accidentalmente due lettere durante la creazione del ramo e questo errore di battitura era davvero difficile da individuare.
Olga,

25

Mi sono imbattuto in questo e mi sono reso conto che non avevo recuperato l'upstream prima di provare a rebase. Tutto ciò di cui avevo bisogno eragit fetch upstream


10

Il problema è che hai ramificato un ramo fuori da .... dove stai cercando di rifare. Non è possibile eseguire il rifasamento su un ramo che non contiene il commit sul quale è stato originariamente creato il ramo corrente.

Ho ottenuto questo quando ho ridisegnato per la prima volta un ramo locale X in uno Y spinto, quindi ho provato a ridimensionare un ramo (prima creato su X) a quello Y spinto.

Risolto per me rifacendo a X.

Non ho alcun problema a eseguire il rebasing su filiali remote (potenzialmente nemmeno estratte), a condizione che il mio ramo corrente provenga da un antenato di quel ramo.


3
È possibile rifarsi a tale ramo con --onto. Tutto discende da alcuni antenati comuni (per i normali repository), quindi non è questo il problema. Ho avuto questo errore provando a rifare su fooquando non avevo ancora creato il ramo da tracciare origin/foo.
cdunn2001,

0

Per telecomando origin:

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.