207 votes

Impossible de pousser vers la branche distante, impossible d'être résolu vers la branche

J'ai migré mes dépôts depuis Bitbucket ou Github. Je ne pense pas que cela soit important, mais c'est la seule chose différente. Pendant un petit moment, j'avais deux télécommandes configurées :

origin: bitbucket
github: github

Puis j'ai supprimé les deux et indiqué l'origine à github :

git remote remove origin
git remote remove github
git remote add origin https://github....

Poussée de test de la branche de développement :

git push origin develop

Tout est à jour, ok, bien.

Créer une nouvelle branche pour du travail comme d'habitude :

git checkout -b Feature/Name

Mettez à jour un ou deux fichiers. Essayer de pousser à distance :

git push origin Feature/Name

Il en résulte l'erreur suivante :

fatal : Feature/Name ne peut pas être résolu à la branche

Je recherche ce problème en ligne, je trouve des informations sur la nécessité de s'assurer que HEAD est correct, d'autres sur la nécessité de s'assurer que la casse du nom de la branche est correcte (bien qu'à ce stade, la branche n'existe pas encore sur le serveur distant). Impossible à résoudre.

J'ai lancé cette commande :

git push --all -u

Cela a obtenu mon Feature/Name branche à github, mais voit toujours le même comportement que précédemment :

git push origin develop
git push origin Feature/Name

La première fonctionne, tandis que la seconde produit la même erreur. Pourquoi ?

1 votes

Sur quelle branche étiez-vous quand vous avez fait Feature/Name ? Est-ce que vous sûr Feature/Name existe et que c'est la branche extraite ? Vérifier avec git branch .

0 votes

@Schwern - Seules trois branches existaient (localement et à distance) : develop, test et master. Une fois qu'une branche a été nettoyée et fusionnée vers develop, je les supprime localement (et à distance le cas échéant). Je suis certain qu'il n'y avait que mes trois branches - je n'ai pas ouvert le projet depuis un moment et la première chose que j'ai faite a été de vérifier et de m'assurer que je n'avais pas de branches libres.

0 votes

Est-ce que ça veut dire que tu as couru git branch pour vérifier Feature/Name existe localement ? Ne vous fiez pas à une interface graphique ou à un IDE. Aussi, avez-vous bien compris le cas ?

695voto

Ty Le Points 1346

J'avais aussi ce problème, et ça me rendait fou. J'avais quelque chose comme feature/name mais git branch -a m'a montré FEATURE/name . Renommer la branche, la supprimer et la recréer, rien ne fonctionnait. Ce qui a finalement réglé le problème :

Allez dans .git/refs/heads

Vous verrez un FEATURE dossier. Renommez-le en feature .

15 votes

C'était la bonne réponse pour moi. J'utilisais gitbash sous Windows, et j'avais créé feature/some-feature et Feature/some-feature.

0 votes

Ceci devrait être marqué comme la réponse correcte. Ça m'a aidé. Merci !

65 votes

Je vous dois une bière pour cette réponse ! :D

43voto

Schwern Points 33677

D'après mes propres tests et les commentaires de l'OP Je pense qu'à un moment donné, ils se sont trompés sur l'enveloppe du nom de la branche.

Tout d'abord, je pense que le PO est sur un système d'exploitation insensible à la casse comme OS X ou Windows. Alors ils ont fait quelque chose comme ça...

$ git checkout -b SQLMigration/ReportFixes
Switched to a new branch 'SQLMigration/ReportFixes'

$ git push origin SqlMigration/ReportFixes
fatal: SqlMigration/ReportFixes cannot be resolved to branch.

Notez la différence de boîtier. Notez également que l'erreur est très différente de celle que vous commettez si vous tapez simplement le nom.

$ git push origin SQLMigration/ReportFixme
error: src refspec SQLMigration/ReportFixme does not match any.
error: failed to push some refs to 'git@github.com:schwern/testing123.git'

Comme Github utilise le système de fichiers pour stocker les noms des branches, il essaie d'ouvrir le fichier .git/refs/heads/SqlMigration/ReportFixes . Comme le système de fichiers n'est pas sensible à la casse, il ouvre avec succès .git/refs/heads/SqlMigration/ReportFixes mais s'embrouille lorsqu'il essaie de comparer les noms des branches en tenant compte de la casse et qu'ils ne correspondent pas.

Comment ils sont arrivés dans un état où la branche locale est SQLMigration/ReportFixes et la branche distante est SqlMigration/ReportFixes Je ne suis pas sûr. Je ne crois pas que Github ait modifié le nom de la branche distante. L'explication la plus simple est que quelqu'un d'autre avec un accès push a changé le nom de la branche distante. Sinon, à un moment donné, ils ont fait quelque chose qui a réussi à créer la branche distante avec la faute de frappe. S'ils vérifient l'historique de leur shell, peut-être avec history | grep -i sqlmigration/reportfixes ils pourraient être en mesure de trouver une commande où ils ont mal saisi le boîtier.

0 votes

J'ai rencontré ce problème lorsque j'ai changé la casse des caractères dans le nom de la branche sous OS X. Le fait de les remettre en place a résolu le problème.

0 votes

Cela peut également se produire lorsque vous avez une branche précédente, disons AM-xxx/some_branch, et que vous en créez une autre AM-XXX/another_branch, git autorisera les différents cas localement et échouera à coupler les deux à distance.

0 votes

Oui, il est possible de vérifier dans le mauvais cas mixte mais pas s'enregistrer .. Juste désordonné.

25voto

moggers Points 103

Git vous laissera vérifier la branche courante avec un casing différent, et il échouera à trouver une ref sur la branche distante.

Je viens de le découvrir à la dure.

1 votes

C'était mon problème. Je vous suggère de faire un rapide > git branch et vérifiez que votre branche est accompagnée d'un *.

0 votes

Cela m'est arrivé aussi. @AndyDangerGagne, je suis heureux que vous ayez suggéré cela - il n'y avait pas de * à côté de la branche sur laquelle je me trouvais, alors j'ai vérifié à nouveau, cette fois en minuscules.

0 votes

Je ne suis pas vraiment sûr de comprendre ce qui s'est passé. J'ai une nouvelle branche que je n'ai pas pu pousser pour la même raison et j'ai pensé essayer de changer la première lettre du nom de la branche en majuscule et ça a marché. Je suppose que la branche existait déjà et que je ne l'ai pas réalisé, même si je ne l'ai pas vu.

11voto

JGL Points 108

Une chose similaire m'est arrivée. J'ai créé une branche appelée quelque chose comme "Feat/name". J'ai essayé de la pousser en utilisant :

git push --set-upstream origin Feat/name

J'ai eu la même erreur fatale que vous :

fatal : Feat/nom ne peut être résolu en branche

Pour résoudre ce problème, j'ai créé une nouvelle branche car j'avais très peu de fichiers impactés. Puis j'ai listé mes branches pour supprimer la mauvaise et elle s'est affichée sans cap :

  • feat/nom

J'avais déjà utilisé des capsules auparavant, mais jamais sur le premier personnage. On dirait que git n'aime pas ça...

0 votes

J'ai eu le même cas THX :D

0 votes

Dans mon cas, cela ne fonctionnera pas car j'ai une branche appelée develop, donc ?

4voto

Dans mon cas, j'avais l'habitude d'avoir un dossier de branche (ou quel que soit son nom) avec des lettres majuscules, puis j'en crée un nouveau avec une casse différente (minuscules) mais git crée effectivement la branche avec des majuscules.

J'ai créé une branche comme feature-ABC/branch1 avant et l'a poussé. Ensuite, je crée une branche feature-abc/branch2 (remarquez la minuscule ABC), et essayez de le pousser à distance en utilisant git push --set-upstream origin feature-abc/branch2 et obtenir l'erreur "cannot be resolved to branch". J'ai donc git branch et voir qu'il a effectivement créé feature-ABC/branch2 au lieu de feature-abc/branch1 pour moi. Je vérifie à nouveau avec git checkout feature-ABC/feature2 et le pousser en utilisant la majuscule ( feature-ABC/feature2 ) pour le résoudre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X