git rebase fatal: besoin d'une seule révision

162

J'ai une branche d'un référentiel public et j'essaye de mettre à jour ma branche avec les commits actuels du référentiel d'origine:

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

Le <remote>est à la place de mon nom distant et n'est pas réellement mon nom distant. La documentation sur cette erreur semble un peu lâche.

jrlmx2
la source
2
J'ai eu cette erreur pour une raison indépendante - en utilisant "git rebase --interactive c4e9c94 ^" à partir d'une invite de commande Windows. Il m'a incité "Plus?", Et peu importe comment il a répondu à l'invite, il a dit "fatal: besoin d'une seule révision". Mais quand j'ai exécuté la même commande de bash, cela a bien fonctionné.
Richard Beier
En passant, pour moi, en plus d'avoir la branche amont listée avec "remote", je devais récupérer la branche spécifique sur laquelle je voulais rebaser. "git fetch <upstream> master". Récupérer juste <upstream> avec "git fetch <upstream>" me donnerait toujours cette erreur.
Douceur

Réponses:

133

Vous devez fournir le nom d'une branche (ou un autre identifiant de validation), et non le nom d'un distant vers git rebase.

Par exemple:

git rebase origin/master

ne pas:

git rebase origin

Notez que, bien que cela origindevrait se résoudre à la référence origin/HEADlorsqu'il est utilisé comme argument où une référence de validation est requise, il semble que tous les référentiels ne reçoivent pas une telle référence, donc cela peut ne pas (et dans votre cas ne fonctionne pas). Il vaut la peine d'être explicite.

CB Bailey
la source
2
Ce dernier devrait réellement fonctionner - origindans le contexte ref est interprété comme origin/HEAD. J'ai vu des référentiels finir par ne pas savoir ce que origin/HEADc'est, cependant ...
Cascabel
1
@Jefromi: J'ai peur de ne pas vous croire, je viens d'essayer git rebase originun dépôt de test (où origina un HEAD) et j'obtiens l'erreur de l'OP. La documentation de rebase ne dit pas qu'un nom distant est valide pour le <upstream>.
CB Bailey
1
@Charles: Eh bien, c'est peut-être un bug? git rev-parse originfonctionne, comme git rebase origindans mon clone git.git (dans un cas à jour, à avance rapide et à vrai rebase, y compris interactif).
Cascabel
@Jefromi: Pouvez-vous git describevotre HEAD?
CB Bailey
@Charles: à jour, v1.7.4-rc3! Je n'ai pas très envie de faire une bissectrice à la recherche de celui-ci ...
Cascabel
28

Vérifiez que vous avez correctement orthographié le nom de la branche . Je rebasais une branche d'histoire (c'est-à-dire branch_name) et j'ai oublié la partie histoire. (ie story/branch_name) puis git m'a craché cette erreur qui n'avait pas beaucoup de sens dans ce contexte.

ChrisJF
la source
Exactement ça. Tapé featureNamelorsque la branche est réellement nomméefeatures/featureName
pkamb
3
Il est également judicieux de rechercher de manière plus approfondie les fautes de frappe simples. J'ai accidentellement échangé deux lettres lors de la création d'une branche et cette faute de frappe était vraiment difficile à repérer.
Olga
25

Je suis tombé sur ceci et j'ai réalisé que je n'avais pas récupéré l'amont avant d'essayer de rebaser. Tout ce dont j'avais besoin était degit fetch upstream

Mario Olivio Flores
la source
10

Le problème est que vous avez bifurqué une branche de ... vers laquelle vous essayez de rebaser. Vous ne pouvez pas rebaser sur une branche qui ne contient pas le commit sur lequel votre branche actuelle a été créée à l'origine.

J'ai eu cela lorsque j'ai rebasé pour la première fois une branche locale X en un Y poussé, puis j'ai essayé de rebaser une branche (créée en premier sur X) en une branche poussée Y.

Résolu pour moi en rebasant en X.

Je n'ai aucun problème à rebaser vers des branches distantes (potentiellement même pas extraites), à condition que ma branche actuelle provienne d'un ancêtre de cette branche.

Maitreya
la source
3
Vous pouvez rebaser une telle branche avec --onto. Tout descend d' un ancêtre commun (pour les dépôts normaux), donc ce n'est pas le problème. J'ai eu cette erreur en essayant de rebaser fooalors que je n'avais pas encore créé la branche à suivre origin/foo.
cdunn2001
0

Pour la télécommande origin:

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

git submodule deinit --all -f travaillé pour moi.

Deepesh Panjabi
la source