Git Rebase fatal: Benötigte eine einzige Revision

162

Ich habe einen Zweig eines öffentlichen Repositorys und versuche, meinen Zweig mit den aktuellen Commits aus dem ursprünglichen Repository zu aktualisieren:

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

Das <remote>ist anstelle meines Remote-Namens und ist eigentlich nicht mein Remote-Name. Die Dokumentation zu diesem Fehler scheint etwas locker zu sein.

jrlmx2
quelle
2
Ich habe diesen Fehler aus einem anderen Grund erhalten - mit "git rebase --interactive c4e9c94 ^" an einer Windows-Eingabeaufforderung. Es forderte mich auf "Mehr?" Und unabhängig davon, wie es auf die Aufforderung antwortete, sagte es "fatal: brauchte eine einzige Revision". Aber als ich den gleichen Befehl von bash aus ausgeführt habe, hat es gut funktioniert.
Richard Beier
Als Randnotiz musste ich zusätzlich zu der Auflistung des Upstream-Zweigs mit "remote" den spezifischen Zweig abrufen, auf den ich mich stützen wollte. "git fetch <upstream> master". Wenn ich nur <upstream> mit "git fetch <upstream>" abrufe, bekomme ich immer noch diesen Fehler.
Süße

Antworten:

132

Sie müssen den Namen eines Zweigs (oder eine andere Festschreibungskennung) angeben, nicht den Namen einer Remote an git rebase.

Z.B:

git rebase origin/master

nicht:

git rebase origin

Beachten Sie, dass, obwohl es als Argument verwendet werden originsollte, origin/HEADwenn eine Festschreibungsreferenz erforderlich ist, es in den Verweis aufgelöst werden sollte, es scheint, dass nicht jedes Repository eine solche Referenz erhält, so dass es möglicherweise nicht funktioniert (und in Ihrem Fall nicht funktioniert). Es lohnt sich, explizit zu sein.

CB Bailey
quelle
2
Letzteres sollte eigentlich funktionieren - originim ref-Kontext wird interpretiert als origin/HEAD. Ich habe gesehen, dass Repositories am Ende nicht wissen, was es origin/HEADist ...
Cascabel
1
@Jefromi: Ich fürchte, ich glaube dir nicht, ich habe gerade git rebase originein Test-Repository ausprobiert (wo originhat ein HEAD) und ich bekomme den OP-Fehler. Die Dokumentation für Rebase besagt nicht, dass ein Remote-Name für das gültig ist <upstream>.
CB Bailey
1
@ Charles: Nun, es kann ein Fehler sein? git rev-parse originfunktioniert wie git rebase originin meinem git.git-Klon (in einem aktuellen, schnellen und echten Rebase-Fall, einschließlich interaktiv).
Cascabel
@ Jefromi: Kannst du git describedein HEAD?
CB Bailey
@ Charles: aktuell, v1.7.4-rc3! Ich bin nicht besonders gespannt auf eine Halbierung, die nach dieser sucht ...
Cascabel
28

Überprüfen Sie, ob Sie den Filialnamen richtig geschrieben haben . Ich habe einen Story-Zweig (dh branch_name) neu aufgebaut und den Story-Teil vergessen. (dh story/branch_name) und dann spuckte git diesen Fehler auf mich, der in diesem Zusammenhang nicht viel Sinn machte.

ChrisJF
quelle
Genau das. Wird eingegeben, featureNamewenn der Zweig tatsächlich benannt istfeatures/featureName
pkamb
3
Auch eine gute Idee, nach einfachen Tippfehlern gründlicher zu suchen. Ich habe beim Erstellen eines Zweigs versehentlich zwei Buchstaben ausgetauscht, und dieser Tippfehler war wirklich schwer zu erkennen.
Olga
25

Ich bin darauf gestoßen und habe festgestellt, dass ich den Upstream nicht abgerufen habe, bevor ich versucht habe, ihn wieder aufzubauen. Alles was ich brauchte war zugit fetch upstream

Mario Olivio Flores
quelle
10

Das Problem ist, dass Sie von einem Zweig von ... abgezweigt haben, zu dem Sie versuchen, eine Basis zu erstellen. Sie können nicht auf einen Zweig zurückgreifen, der nicht das Commit enthält, für das Ihr aktueller Zweig ursprünglich erstellt wurde.

Ich habe dies erhalten, als ich zum ersten Mal einen lokalen Zweig X auf einen Push-Y umgestellt habe und dann versucht habe, einen Zweig (der zuerst auf X erstellt wurde) auf den Push-Y umzustellen.

Für mich durch Umbasierung auf X gelöst.

Ich habe kein Problem damit, auf entfernte Zweige umzusteigen (möglicherweise nicht einmal ausgecheckt), vorausgesetzt, mein aktueller Zweig stammt von einem Vorfahren dieses Zweigs.

Maitreya
quelle
3
Sie können mit auf einen solchen Zweig zurückgreifen --onto. Alles stammt von einem gemeinsamen Vorfahren ab (für normale Repositories), das ist also nicht das Problem. Ich habe diesen Fehler erhalten, weil fooich versucht habe, eine Basis zu erstellen, als ich den zu verfolgenden Zweig noch nicht erstellt hatte origin/foo.
cdunn2001
0

Für Fernbedienung origin:

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

git submodule deinit --all -f arbeitete für mich.

Deepesh Panjabi
quelle