Votre configuration spécifie de fusionner avec le <nom de la branche> de la télécommande, mais aucune référence de ce type n'a été récupérée.?

204

J'obtiens cette erreur pour pull:

Votre configuration spécifie de fusionner avec la référence 'refs / heads / feature / Sprint4 / ABC-123-Branch' de la télécommande, mais aucune référence de ce type n'a été récupérée.

Cette erreur ne vient pour aucune autre branche.
La particularité de cette branche est qu'elle est créée à partir du commit précédent d'une autre branche.

Mon fichier de configuration ressemble à:

[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true
    symlinks = false
    ignorecase = true
    hideDotFiles = dotGitOnly
[remote "origin"]
    url = <url here>
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[branch "new-develop"]
    remote = origin
    merge = refs/heads/new-develop
[branch "feature/Sprint4/ABC-123-Branch"]
    remote = origin
    merge = refs/heads/feature/Sprint4/ABC-123-Branch
Farrukh Chishti
la source
Pouvez-vous partager la commande que vous utilisez pour effectuer la fusion?
dchayka
1
Ce problème peut se produire lorsque la branche distante a été supprimée. Vérifiez si c'est vraiment là.
Benny Neugebauer
4
Futurs lecteurs: si vous savez que la branche distante existe, vérifiez si vous ignorez la casse ou non. J'avais configuré une branche locale pour suivre une branche distante, mais j'ai tapé le nom de la télécommande dans toutes les lettres minuscules. Juste eu à reconfigurer local pour suivre l'origine / BranchName au lieu de l'origine / branchname
Jerreck
Je viens d'avoir cette erreur et le problème était beaucoup plus simple que les réponses ci-dessous, j'avais perdu ma connexion VPN. C'est donc aussi l'erreur que vous obtenez si git ne peut pas accéder au serveur d'origine distant.
Ben Thurley
Mon serveur git était hors service. Voilà la cause.
dellasavia

Réponses:

151

Qu'est-ce que cela signifie

Votre amont - la télécommande que vous appelez origin- n'a plus, ou n'a peut-être jamais eu (il est impossible de dire à partir de cette seule information) une branche nommée feature/Sprint4/ABC-123-Branch. Il y a une raison particulièrement courante à cela: quelqu'un (probablement pas vous, ou vous vous en souvenez) a supprimé la branche dans cet autre référentiel Git.

Que faire

Cela dépend de ce que vous voulez . Voir la section discussion ci-dessous. Vous pouvez:

  • créer ou recréer la branche sur la télécommande, ou
  • supprimer votre succursale locale, ou
  • tout ce à quoi vous pouvez penser.

Discussion

Vous devez être en cours d'exécution git pull(si vous étiez en cours git merged' exécution, vous obtiendrez un message d'erreur différent ou aucun message d'erreur du tout).

Lorsque vous exécutez git fetch, votre Git contacte un autre Git, en fonction de la urlligne sous la [remote "origin"]section de votre configuration. Ce Git exécute une commande ( upload-pack) qui, entre autres, envoie à votre Git une liste de toutes les branches. Vous pouvez utiliser git ls-remotepour voir comment cela fonctionne (essayez-le, c'est éducatif). Voici un extrait de ce que j'obtiens en exécutant ceci sur un référentiel Git pour gitlui-même:

$ git ls-remote origin
From [url]
bbc61680168542cf6fd3ae637bde395c73b76f0f    HEAD
60115f54bda3a127ed3cc8ffc6ab6c771cbceb1b    refs/heads/maint
bbc61680168542cf6fd3ae637bde395c73b76f0f    refs/heads/master
5ace31314f460db9aef2f1e2e1bd58016b1541f1    refs/heads/next
9e085c5399f8c1883cc8cdf175b107a4959d8fa6    refs/heads/pu
dd9985bd6dca5602cb461c4b4987466fa2f31638    refs/heads/todo
[snip]

Les refs/heads/entrées répertorient toutes les branches qui existent sur la télécommande, 1 avec les ID de validation correspondants (pour les refs/tags/entrées, les ID peuvent pointer vers des objets de balise plutôt que des validations).

Votre Git prend chacun de ces noms de branche et le change en fonction de la ou des fetchlignes de cette même remotesection. Dans ce cas, votre Git remplace refs/heads/masterpar refs/remotes/origin/master, par exemple. Votre Git fait cela avec chaque nom de branche qui apparaît.

Il enregistre également les noms originaux dans le fichier spécial FETCH_HEAD(vous pouvez voir ce fichier si vous regardez dans votre propre .gitrépertoire). Ce fichier enregistre les noms et identifiants récupérés.

La git pullcommande est conçue comme un raccourci pratique: elle s'exécute git fetchsur la télécommande appropriée, puis git merge(ou, si vous y git rebaseêtes invité, ) avec les arguments nécessaires pour fusionner (ou rebaser) comme indiqué par la [branch ...]section. Dans ce cas, votre [branch "feature/Sprint4/ABC-123-Branch"]section dit de récupérer origin, puis de fusionner avec l'ID trouvé sous le nom refs/heads/feature/Sprint4/ABC-123-Branch.

Puisque rien n'a été trouvé sous ce nom, se git pullplaint et s'arrête.

Si vous exécutez cela en deux étapes distinctes, git fetchpuis git merge(ou git rebase), votre Git examinera vos remotes/origin/branches de suivi à distance mises en cache pour voir avec quoi fusionner ou rebaser. S'il y avait une telle succursale à un moment donné, vous pouvez toujours avoir la succursale de suivi à distance. Dans ce cas, vous n'obtiendrez pas de message d'erreur. S'il n'y a jamais eu une telle branche, ou si vous avez exécuté git fetchavec --prune(qui supprime les branches de suivi à distance mortes), de sorte que vous n'ayez pas de branche de suivi à distance correspondante, vous obtiendrez une plainte, mais elle ferait référence à la origin/feature/Sprint4/ABC-123-Branchplace.

Dans les deux cas , nous pouvons conclure qu'il feature/Sprint4/ABC-123-Branchn'existe pas actuellement sur la télécommande nommée origin.

Il a probablement existé à un moment donné, et vous avez probablement créé votre branche locale à partir de la branche de suivi à distance. Si tel est le cas, vous avez probablement toujours la branche de suivi à distance. Vous pouvez rechercher qui a supprimé la branche de la télécommande et pourquoi, ou vous pouvez simplement pousser quelque chose pour la recréer, ou supprimer votre branche de suivi à distance et / ou votre branche locale.


1 Eh bien, tout ce qu'il va admettre , au moins. Mais à moins qu'ils n'aient spécifiquement caché certaines références, la liste comprend tout.

Edit, juillet 2020: Il existe un nouveau protocole de récupération qui peut éviter de tout lister , et ne répertorie que les noms que votre Git dit rechercher. Cela peut aider avec les référentiels qui ont un grand nombre de branches et / ou de balises. Cependant, si votre Git est intéressé par tous les noms possibles, vous obtiendrez toujours tous les noms ici.

Torek
la source
Merci d'avoir expliqué ce que fait réellement la commande git pull. J'ai pu résoudre mon problème en exécutant git fetch, puis en fusionnant.
fizch
11
Pour supprimer les références de branche distantes inexistantes dans votre référentiel local, utilisezgit remote prune origin
Yoav
1
@ Ben-Uri: oui, ou, exécutez git fetch --prune originou définissez fetch.prunesur truedans votre configuration (tous les trois sont destinés à faire la même chose, bien que dans quelques versions de Git, certaines d'entre elles n'étaient pas tout à fait fiables).
torek le
1
Vous auriez besoin git checkout <your remote branch>et tout être bon (dans certains cas).
Alexander Shtang
3
@JonathanBenn: vous pouvez utiliser git branch --set-upstream-to=origin/master masterpour changer le paramètre en amont pour votre local master. Supprimer-et-recréer a cela comme un effet secondaire (en supposant que vous utilisez le style DWIM git checkout masterpour le créer), avec un effet secondaire supplémentaire de forcer votre masterà correspondre à votre origin/master.
torek
72

Cela peut également se produire si vous / quelqu'un a renommé la branche. Suivez donc ces étapes (si vous savez que le nom de la branche est renommé) En supposant que le nom de la branche plus tôt est wrong-branch-nameet que quelqu'un l'a renommé correct-branch-nameSo.

git checkout correct-branch-name

git pull (vous verrez ceci "Votre configuration spécifie ..")

git branch --unset-upstream

git push --set-upstream origin correct-branch-name

git pull (vous ne recevrez pas le message précédent)

Extrême
la source
1
Ce n'est même pas nécessaire git pushet cela ne fonctionnera pas si la branche actuelle est derrière sa télécommande. git pull origin correct-branch-nameest assez.
Pierre
2
La commande à configurer en amont est erronée ci-dessus. Faites une opération git pull après, --unset-upstream, dans la sortie de l'extraction, vous pouvez voir une erreur, avec la commande pour définir l'amont, comme ci-dessous, git branch --set-upstream-to = origin / <branch > mybranch
Ankit Marothi
Cela a bien fonctionné pour moi après avoir supprimé certains fichiers volumineux de mon dépôt et j'ai dû repousser vers un nouveau dépôt que je viens de créer
larrytech
40

Vérifiez si votre branche distante est disponible pour l'extraction. J'ai eu le même problème, j'ai finalement réalisé que la branche distante avait été supprimée par quelqu'un.

Malhaar Punjabi
la source
4
C'était pareil pour moi!
Aerin
3
Après une pull request, la fusion (c'est-à-dire la personne qui a effectué la fusion) a la possibilité de supprimer la branche qui a été fusionnée dans la branche cible. Si vous essayez de tirer à ce stade, vous obtiendrez cette erreur.
Artokun
c'est vrai :)
Malhaar Punjabi
7

Pour moi, c'était une question de sensibilité à la casse. Ma branche locale était Version_feature2 au lieu de Version_Feature2. J'ai revérifié ma branche en utilisant le bon boîtier, puis git pull a fonctionné.

Nicko
la source
2
Cela s'est avéré être mon problème aussi. Ce n'est pas forcément évident avec des noms de branche assez longs / compliqués.
Håkon K. Olafsen
6

Cette erreur peut également être reçue lorsque le nom de la branche d'origine a un problème de cas.

Par exemple: la branche d'origine est team1-Teamet la branche locale a été extraite en tant que team1-team. Ensuite, cela Tdans -Teamet ten -teampeut provoquer une telle erreur. Cela s'est produit dans mon cas. Ainsi, en changeant le nom local avec le nom de la branche d'origine, l'erreur a été résolue.

Akgupta
la source
6

Dans mon cas, je manquais simplement de validation initiale sur la branche distante, donc la branche locale ne trouvait rien à tirer et elle donnait ce message d'erreur.

J'ai fait:

git commit -m 'first commit' // on remote branch
git pull // on local branch
Nicola Gallazzi
la source
4

J'ai eu une erreur similaire lorsque la cause réelle était que mon disque était plein. Après avoir supprimé certains fichiers, a git pullcommencé à fonctionner comme prévu.

user1747134
la source
4

J'ai continué à rencontrer ce problème. Dans mon cas, le commentaire de @ Jerreck sur les différences de casse dans les noms de branche était la cause de cette erreur. Certains outils Windows ne sont pas conscients du respect de la casse.

Pour désactiver le respect de la casse dans git, exécutez cette commande:

git config --global core.ignorecase true

Notez que cela aura un impact plus important que les noms de branche. Par exemple, si vous avez "Foo.h" et "foo.h" dans le même répertoire (ce n'est pas une bonne idée lors de la création de logiciels pour Windows), je suppose que vous ne pouvez pas désactiver la sensibilité à la casse.

Stéphane
la source
2

Vérifiez simplement si quelqu'un a supprimé la branche à distance.

AB Abhi
la source
1

Dans mon cas, j'avais supprimé la branche d'origine d'où ma branche actuelle dérivait. Donc, dans le fichier .git / config, j'avais:

[branch "simil2.1.12"]
    remote = origin
    merge = refs/heads/simil2.0.5
    rebase = false

le simil2.0.5 a été supprimé. Je l'ai remplacé par le même nom de branche:

[branch "simil2.1.12"]
    remote = origin
    merge = refs/heads/simil2.1.12
    rebase = false

et ça a marché

Guilherme Campos Hazan
la source
1

Vous pouvez facilement lier votre succursale locale à une succursale distante en exécutant:

git checkout <your-local-branch>
git branch --set-upstream-to=origin/<correct-remote-branch> <your-local-branch>
git pull
Gendos-ua
la source
0

Pour moi, cela s'est produit parce que j'ai fusionné un développement de branche en maître à l'aide de l'interface Web, puis j'ai essayé de synchroniser / tirer en utilisant VSCode qui était ouvert sur la branche de développement (c'est étrange que je ne puisse pas changer en maître sans obtenir cette erreur.)

git pull
Your configuration specifies to merge with the ref 'refs/heads/dev'
from the remote, but no such ref was fetched.'

Il est logique de ne pas le trouver refs / heads / dev - pour moi, il était plus facile de simplement supprimer le dossier local et de le cloner à nouveau.

Dawit
la source
0

Je viens de recevoir exactement cette erreur en faisant "git pull" alors que mon disque était plein. Créé un peu d'espace et tout a recommencé à fonctionner correctement.

user7550381
la source
0

Vous pouvez modifier le ~/.gitconfigfichier dans votre dossier de départ. C'est là que tous les paramètres --global sont enregistrés.

Ou, utilisez git config --global --unset-all remote.origin.urlet après l'exécution git fetchavec l'URL du référentiel.

Angelo Mendes
la source
0

J'étais confronté au même problème où ma branche actuelle était dev et je vérifiais la branche MR et faisais git pull par la suite. Une solution de contournement simple que j'ai prise a été de créer un nouveau dossier pour MR Branch et d'y faire git pull suivi de git clone.

Donc, fondamentalement, j'ai maintenu différents dossiers pour pousser le code vers différentes branches.

Monalisa Das
la source
0

J'ai juste eu la même erreur, quand je n'ai pas utilisé la bonne casse. Je pourrais consulter «intégration». Git m'a dit d'effectuer une git pullmise à jour de ma branche. Je l'ai fait, mais j'ai reçu l'erreur mentionnée. Le nom correct de la succursale est «Intégration» avec un «I» majuscule. Quand j'ai vérifié cette branche et tiré, cela a fonctionné sans problème.

emi-le
la source
-2

Si un autre pull fonctionne, cela signifie que votre Internet n'était pas connecté.

Pyrolistique
la source
Un certain nombre de votes négatifs et pourtant c'était la cause que j'avais de recevoir cette erreur. J'avais Internet mais j'avais perdu le VPN sur mon serveur git. Après la reconnexion au VPN, l'extraction a bien fonctionné.
Ben Thurley