2011-01-25 8 views
107

Ho un ramo di un archivio pubblico e sto cercando di aggiornare il mio ramo con i commit corrente dal repository originale:git rebase fatali: Bisogno di una singola revisione

$ 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> è al posto del mio nome remoto 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 - utilizzando "git rebase --interactive c4e9c94 ^" da un prompt dei comandi di Windows. Mi ha spinto "More?", E indipendentemente da come ha risposto al prompt, ha detto "fatale: era necessaria una revisione singola". Ma quando ho eseguito lo stesso comando da bash, ha funzionato bene. –

+0

Come nota a margine, per me oltre ad avere il ramo upstream elencato con "remote" ho dovuto recuperare il ramo specifico su cui volevo rebase. "git fetch master". Recuperare solo con "git fetch " mi darebbe comunque questo errore. – Sweetness

risposta

88

È necessario fornire il nome di una diramazione (o altro identificatore di commit), non il nome di un telecomando su git rebase.

Es:

git rebase origin/master 
non

:

git rebase origin 

nota, anche se origin dovrebbe risolvere il rif origin/HEAD quando viene utilizzato come parametro in cui è richiesto un riferimento commit, sembra che non tutti repository guadagna tale riferimento quindi non può (e nel tuo caso non funziona). Vale la pena essere espliciti.

+1

Quest'ultimo dovrebbe funzionare: "origin" nel contesto ref viene interpretato come "origine/HEAD". Ho visto che i repository finiscono per non sapere cosa sia 'origin/HEAD', anche se ... – Cascabel

+1

@Jefromi: Temo che non ti creda, ho appena provato 'git rebase origin 'su un repository di test (dove' origin' ha un 'HEAD') e ottengo l'errore dell'OP. La documentazione di rebase non dice che un nome remoto è valido per ''. –

+1

@Charles: beh, potrebbe essere un bug? 'git rev-parse origin' funziona, così come' git rebase origin 'nel mio clone git.git (in caso di upbase aggiornato, rapido e vero rebase, incluso interattivo). – Cascabel

9

Il problema è che si è staccato un ramo da .... dove si sta tentando di rebase a. Non puoi rebase su un ramo che non contiene il commit su cui il tuo attuale ramo è stato originariamente creato.

ho ottenuto questo quando ho Ribasato un ramo X locale ad un spinto uno Y, poi cercò di rebase un ramo (prima creato su X) per la spinta uno Y.

risolto per me da rebasing a X

Non ho alcun problema di rebasing a filiali remote (potenzialmente non ancora verificate), a condizione che il mio attuale ramo provenga da un antenato di quel ramo.

+3

Puoi rebase a tale ramo con '--onto'. Tutto discende da * alcuni * antenati comuni (per i normali repository), quindi non è questo il problema. Ho ricevuto questo errore provando a rebase su 'pippo' quando non avevo ancora creato il ramo per tracciare' origine/pippo'. – cdunn2001

18

Verificare di avere corretto il nome del ramo. Stavo rifondando una storia (cioè branch_name) e ho dimenticato la parte della storia. (ad esempio story/branch_name) e quindi git sputarmi questo errore che non aveva molto senso in questo contesto.

+0

Esattamente questo. Digitato 'featureName' quando il ramo è effettivamente chiamato' features/featureName' – pkamb

+2

Anche una buona idea per cercare errori di battitura più semplici. Ho scambiato accidentalmente due lettere durante la creazione del ramo e questo errore di battitura è stato davvero difficile da individuare. – Olga

0

Per remoto origin:

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

mi sono imbattuto in questo e realizzato non ho prendere il monte prima di tentare di rebase. Tutto ciò di cui avevo bisogno era a git fetch upstream

-1

Ho erroneamente digitato git rebase quando intendevo git bisect. Assicurati di utilizzare il comando che ti aspetti!