Impossible de pousser vers une branche distante, impossible de résoudre une branche

110

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

origin: bitbucket
github: github

Ensuite, j'ai supprimé les deux et ai pointé l'origine vers github:

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

Test push de la branche de développement:

git push origin develop

Tout est à jour, ok, bien.

Créez une nouvelle branche pour certains travaux comme d'habitude:

git checkout -b Feature/Name

Mettez à jour un fichier ou deux. Tentative de pousser vers la télécommande:

git push origin Feature/Name

Cela entraîne l'erreur:

fatal: la fonction / le nom ne peut pas être résolu en branche

Recherchez ce problème en ligne, trouvez des informations pour vérifier que HEAD est correct, d'autres pour vous assurer que la casse de mon nom de branche est correcte (bien qu'à ce stade, la branche n'existe pas encore sur la télécommande). Impossible de résoudre.

Exécuté cette commande:

git push --all -u

Cela a amené ma Feature/Namebranche à github, mais j'ai toujours le même comportement que précédemment:

git push origin develop
git push origin Feature/Name

Le premier fonctionne, le second jette la même erreur.

Je ne comprends pas pourquoi j'obtiens cette erreur. Des idées?

jleach
la source
1
Dans quelle branche étiez-vous lorsque vous avez créé Feature/Name? Êtes-vous sûr qu'il Feature/Name existe et que c'est la branche extraite? Vérifiez avec git branch.
Schwern
@Schwern - Seules trois branches existaient (localement et à distance): développement, test et master. Une fois qu'une branche est nettoyée et fusionnée pour se développer, je la supprime localement (et à distance le cas échéant). Je suis certain qu'il n'y en avait que trois - 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 lâches.
jleach
Cela signifie-t-il que vous avez couru git branchpour vérifier l' Feature/Nameexistence localement? Ne faites pas confiance à une interface graphique ou à un IDE. Aussi, avez-vous bien compris le cas?
Schwern
Et pourquoi pas git push origin Feature/Name:Feature/Name?
ElpieKay
Maintenant, je suis énervé ... je ne sais pas pourquoi cela n'a pas fonctionné en premier lieu, mais après avoir utilisé, git push --all -uj'ai la nouvelle branche dans github, mais je ne peux toujours pas pousser depuis local, non? Voici ce qui s'est passé avec ça ... le nom réel de la branche est SQLMigration/ReportFixeset ce qu'il y a dans github SqlMigration/ReportFixes. Alors, maintenant je peux git push origin SqlMigration/ReportFixes- pourquoi github change-t-il la casse pour moi? Agh.
jleach

Réponses:

380

J'avais aussi ce problème et cela me rendait fou. J'avais quelque chose comme feature/namemais git branch -am'a montré FEATURE/name. Renommer la branche, la supprimer et la recréer, rien n'a fonctionné. Ce qui a finalement résolu le problème:

Entrer dans .git/refs/heads

Vous verrez un FEATUREdossier. Renommez-le en feature.

Ty Le
la source
4
C'était la bonne réponse pour moi. Utilisait gitbash sur Windows et avait créé une fonctionnalité / une fonctionnalité et une fonctionnalité / une fonctionnalité.
Dylan McCurry
Cela devrait être marqué comme la bonne réponse. M'a aidé. Merci!
GuiDoody
21
Je vous dois de la bière pour cette réponse! : D
Vojta
1
Wow, belle prise. Cela m'a fait gagner beaucoup de temps. Merci !
Piyush
2
@Pegues - c'est fait. Je ne pense pas que cette réponse ait existé longtemps après que j'ai eu le problème, mais elle semble être la plus populaire, alors voilà.
jleach
30

Sur la base de mes propres tests et des commentaires de l'OP , je pense qu'à un moment donné, ils ont gaffé sur le boîtier du nom de la branche.

Tout d'abord, je crois que l'OP est sur un système d'exploitation insensible à la casse comme OS X ou Windows. Puis 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 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 '[email protected]:schwern/testing123.git'

Étant donné que Github utilise le système de fichiers pour stocker les noms de branche, il essaie de s'ouvrir .git/refs/heads/SqlMigration/ReportFixes. Parce que le système de fichiers est insensible à la casse, il s'ouvre avec succès .git/refs/heads/SqlMigration/ReportFixesmais devient confus lorsqu'il essaie de comparer les noms de branche en tenant compte de la casse et qu'ils ne correspondent pas.

Comment ils sont arrivés dans un état où se trouvent la succursale locale SQLMigration/ReportFixeset la succursale distante, SqlMigration/ReportFixesje ne suis pas sûr. Je ne pense pas que Github ait manipulé 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 télécommande avec la faute de frappe. S'ils vérifient l'historique de leur shell, history | grep -i sqlmigration/reportfixesils pourront peut-être trouver une commande où ils ont mal tapé le boîtier.

Schwern
la source
J'ai rencontré ce problème lorsque j'ai changé la casse des caractères dans le nom de la branche sous OS X. Les changer a résolu le problème.
Steven C. Howell
Cela peut également se produire lorsque vous avez une branche précédente, disons AM-xxx / some_branch, puis en créez une autre AM-XXX / another_branch, git autorisera les cas différents localement et échouera à coupler les deux à distance.
timpwbaker
Oui, il est possible de vérifier dans le mauvais cas mixte mais pas de s'enregistrer .. Juste en désordre.
javadba
12

Git vous permettra de récupérer la branche actuelle avec un boîtier différent, et il ne parviendra pas à trouver une référence sur la télécommande.

Je viens de découvrir la manière difficile.

moggers
la source
1
c'était mon problème. Je suggérerais de faire un rapide > git branchet de vérifier que votre succursale a un * à côté.
Andy Danger Gagne
Cela m'est également arrivé. @AndyDangerGagne, je suis heureux que vous ayez suggéré ceci - il n'y avait pas de * à côté de la branche où j'étais, alors je l'ai vérifié à nouveau, cette fois en minuscules.
Cognitiaclaeves
9

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

git push --set-upstream origin Feat / nom

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

fatal: la fonctionnalité / le nom ne peut pas être résolu en branche

Pour le résoudre, j'ai créé une nouvelle branche car j'avais très peu de fichiers impactés. Ensuite, j'ai répertorié mes branches pour supprimer la mauvaise et elle s'est affichée sans plafond:

  • exploit / nom

J'avais utilisé des casquettes avant mais jamais sur le premier caractère. On dirait que git n'aime pas ça ...

JGL
la source
J'ai eu le même cas THX: D
abdoutelb
5

C'est sensible à la casse, assurez-vous simplement que la branche créée et pousser pour la branche sont toutes les deux dans la même capitale.

Exemple:

git checkout -b "TASK-135-hello-world"

MAUVAISE façon de faire:

git push origin task-135-hello-world     #FATAL: task-135-hello-world cannot be resolved to branch

BONNE façon de faire:

git push origin TASK-135-hello-world
Sher
la source
2

Peut-être que vous avez oublié d'exécuter git fetch? il est nécessaire de récupérer les données du dépôt distant! Essayez de courirgit fetch remote/branch

joker
la source
2

Pour mon cas, j'avais l'habitude d'avoir un dossier de branche (ou peu importe son nom) avec des lettres majuscules, puis j'en crée un nouveau avec une casse différente (minuscule) mais git crée en fait la branche avec une majuscule.

J'ai créé une branche comme feature-ABC/branch1avant et l' ai poussée. Ensuite, je crée une branche feature-abc/branch2(notez l'ABC en minuscule), et j'essaye de la pousser vers une utilisation à distance git push --set-upstream origin feature-abc/branch2et j'obtiens l'erreur `` Impossible de résoudre la branche ''. Donc , je git branchet vois qu'il en fait créé au feature-ABC/branch2lieu de feature-abc/branch1pour moi. Je vérifie à nouveau avec git checkout feature-ABC/feature2et le pousse en utilisant les majuscules ( feature-ABC/feature2) pour le résoudre.

Vee Trairattanapa
la source
2

J'ai rencontré le même problème qui était dû à une branche avec un mauvais boîtier. git permettez-moi de passer à la branche avec une casse incorrecte, c'est- feature/Nameà- dire au lieu de feature/name. J'ai trouvé une solution plus simple que celle indiquée ci-dessus juste:

  • valider vos modifications dans «fonctionnalité / nom»
  • git checkout master (or develop)
  • git checkout feature/name <avec un boîtier correct
  • git push
Corbin Hudson
la source
2

J'ai résolu cela dans Windows 10 en utilisant cmd au lieu de GitBash .

Cela a à voir avec la casse des caractères et la façon dont git et les lignes de commande les gèrent.

jmojico
la source
1

Vous avez peut-être créé une branche similaire mais différente en fonction de la casse, vous devez alors exécuter:

git branch -D <name-of-different-case-branch>

puis essayez de pousser à nouveau.

Loko
la source
1

Réponse légèrement modifiée de @Ty Le:

aucun changement dans les fichiers n'était nécessaire pour moi - j'avais une branche nommée 'Feature / ...' et tout en poussant vers l'amont, j'ai changé le titre en 'feature / ...' (la casse de la première lettre a été remplacée par celle du bas ).

Ryzhman
la source
0

Je viens d'avoir ce problème aussi et mes branches normales commencent par pb-3.1-12345/namebranchmais j'ai accidentellement mis en majuscule les 2 premières lettres PB-3.1/12345/namebranch. Après avoir renommé la branche pour utiliser des lettres minuscules, j'ai pu créer la branche.

Peter Boomsma
la source
0

pour moi, je nommais la branche comme

Rel4.6 / bug / Une brève description

tout ce que j'avais à faire est d'utiliser

git push origin R elx.x / bug / Some-short-description

pour écrire

git push origin r elx.x / bug / Une brève description

comme j'avais l'habitude de créer des branches en utilisant la petite lettre r dans rel.

alors, qu'est-ce qui a causé ce problème?

lorsque j'ai répertorié le .git/refs/headscontenu que j'ai trouvé

drwxr-xr-x  4 eslam_khoga  staff   128B Sep 22 20:22 relx.x

mais non Relx.x!

et à l'intérieur buget à l'intérieur bugdu nom de ma succursale.

Donc, git essayez de créer un répertoire avec le même nom mais des lettres de cas différentes

mais le système n'est pas sensible à la casse.

C'est ce qui a causé ce problème!

KhogaEslam
la source
0

Eu le même problème avec un boîtier différent.

A fait une vérification vers le développement (ou maître), puis a changé le nom (le mauvais nom) en quelque chose d'autre comme test.

  • développement git checkout
  • git branch -m test de nom erroné

puis remplacez le nom par le bon nom

  • git branch -m test nom-droit

puis passez à la branche du bon nom

  • git checkout right-name

puis cela a fonctionné pour pousser vers la branche distante

  • git push origin nom-droit
Jim Nervall
la source
0

Pour moi, le problème était que git et mon système de fichiers macOS étaient définis sur deux sensibilités différentes à la casse. Mon Mac était formaté APFS / est sensible à la casse: NON mais j'avais inversé mes paramètres git à un moment donné en essayant de surmonter un problème étrange avec la dénomination des ressources d'image Xcode, donc git config --global core.ignorecase false . En le retournant, aligné les paramètres et recréant la branche et en poussant m'a remis sur la bonne voie.

git config --global core.ignorecase true

Crédit: https://www.hanselman.com/blog/GitIsCasesensitiveAndYourFilesystemMayNotBeWeirdFolderMergingOnWindows.aspx

Michael
la source
0

J'ai eu le même problème mais j'ai été résolu. J'ai réalisé que le nom de la branche est sensible à la casse. La branche principale de GitHub est 'master', tandis que dans ma commande gitbash c'est 'Master'. J'ai renommé Master dans le référentiel local en master et cela a fonctionné! 😀😀

Waswa Rodgers
la source
0

J'ai rencontré le même problème et j'ai remarqué que j'avais mélangé le boîtier lors de la vérification de la succursale. J'ai vérifié au branchNamelieu de BranchNameet quand j'ai essayé de pousser vers la télécommande, j'ai eu la même erreur.

Le correctif:

git push --set-upstream origin BranchName

En définissant en amont le nom correct, la branche correcte a été mise à jour sur github et j'ai ensuite pu vérifier le nom de branche correct avec

git checkout BranchName 

Et il devrait être à jour avec votre dernière poussée.

bediV5
la source
-1

Si vous êtes dans une branche locale, vous pouvez renommer la branche "Fonctionnalité / Nom" en "Fonctionnalité / Nom"

git -m feature/Name

si vous rencontrez des problèmes pour effectuer une git pushvérification dans une autre branche (ex develop) et revenir à la branche renommée

git checkout feature/Name

et réessayez votre git push

Ronaldo Albertini
la source