Comment résoudre l'erreur «pas quelque chose que nous pouvons fusionner» de git

291

Je viens de rencontrer un problème lors de la fusion d'une branche en master dans git. Tout d'abord, j'ai obtenu le nom de la branche en exécutant git ls-remote. Appelons cette branche "nom-branche". J'ai ensuite exécuté la git merge branch-namecommande et obtenu le résultat suivant:

fatal: branch-name - not something we can merge

Comment résoudre cette erreur?

Brian
la source

Réponses:

356

Comme indiqué dans Comment «ne peut-on pas fusionner»? , cette erreur peut provenir d'une faute de frappe dans le nom de la branche car vous essayez de tirer une branche qui n'existe pas.

Si ce n'est pas le problème (comme dans mon cas), il est probable que vous ne disposiez pas d'une copie locale de la branche que vous souhaitez fusionner. Git nécessite une connaissance locale des deux branches afin de fusionner ces branches. Vous pouvez résoudre ce problème en consultant la branche à fusionner, puis en revenant à la branche dans laquelle vous souhaitez fusionner.

git checkout branch-name
git checkout master
git merge branch-name

Cela devrait fonctionner, mais si vous recevez une erreur indiquant

error: pathspec 'remote-name/branch-name' did not match any file(s) known to git.

vous devez récupérer la télécommande (probablement, mais pas nécessairement, "origine") avant de vérifier la branche:

git fetch remote-name
Brian
la source
3
Cela m'est arrivé après avoir ajouté une nouvelle télécommande - je devais faire une git fetchpremière avant de fusionner la branche distante.
Jason
récupération et extraction d'une branche à distance. git fetch && git checkout BranchName
Juni Brosas
2
Cela m'est arrivé lorsque j'ai été enregistré sur le mauvais projet (c'est-à-dire que c'était un dépôt différent qui n'avait même pas la branche que je voulais fusionner)
JoelFan
1
Si vous essayez de synchroniser un fork sur la ligne de commande ( help.github.com/articles/syncing-a-fork ), cette erreur est probablement due au fait que vous avez manqué l'étape 0. Quoi? Aucune étape 0 n'est répertoriée? Oui, c'est pourquoi c'est facile à manquer. "Avant de pouvoir synchroniser votre fork avec un référentiel en amont, vous devez configurer une télécommande qui pointe vers le référentiel en amont dans Git." <- c'est l'étape 0. Si vous sautez cette étape, vous obtenez l'erreur ci-dessus, que vous avez probablement mise dans Google, vous menant ici. :-)
Steve Bonds
1
Git requires local knowledge of both branches in order to merge those branches
Gangadhar JANNU
96

C'est une suggestion stupide, mais assurez-vous qu'il n'y a pas de faute de frappe dans le nom de la branche!

interminable
la source
4
pas si idiot, car "typo" pourrait réduire au fait que la branche n'a pas encore été récupérée (et donc inconnue localement) .. Git fait les choses différemment de CVS ou SVN ..
klang
2
Le problème peut également être dû au fait que le nom de la branche contient des caractères tels que des virgules (,) ou des apostrophes (').
AxeEffect
Assurez-vous également que vous êtes dans le bon repo ou la fenêtre / l'onglet du terminal, surtout si vous travaillez sur plusieurs dépôts simultanément.
totymedli
71

En tirant d'une télécommande en amont, a git fetch --allfait l'affaire pour moi:

git remote add upstream [url to the original repo]
git checkout [branch to be updated]
git fetch --all
git merge upstream/[branch to be updated]

Dans d'autres cas, j'ai trouvé que l'erreur "Pas quelque chose que nous pouvons fusionner" se produira également si la branche distante (origine, amont) n'existe pas. Cela peut sembler évident, mais vous pourriez vous retrouver à faire git merge origin/developsur un repo qui a seulement master.

Eneko Alonso
la source
5
Je ne sais vraiment pas pourquoi cette réponse n'a pas recueilli autant de votes que la précédente. 'git fetch -all' est la commande que l'on manque généralement d'exécuter avant de fusionner une branche distante et qui a résolu le problème pour moi.
Dayanand Gowda
2
Parce que l'extraction ne tire pas automatiquement et vous devez le faire manuellement. Donc une paire va chercher - tous et tirer - tous fera l'affaire.
danielpopa
Je vous remercie! La git remote add upstreamétait la chose importante que je manquais qui a résolu le problème pour moi. Je pense qu'une erreur courante est de supposer qu'une fourchette sait automatiquement d'où elle provient.
Brent
23

J'avais aussi ce problème. La branche ressemblait à «nom d'utilisateur / maître», ce qui semblait confondre git car elle ressemblait à une adresse distante que j'ai définie. Pour moi en utilisant cela

git merge origin/username/master

a parfaitement fonctionné.

spekulatius
la source
4
Je devais également mettre origin/le nom de la succursale distante.
AsGoodAsItGets
Vous devrez le faire si le nom de la branche contient une barre oblique /.
CTS_AE
21

La méthode ci-dessous fonctionne pour moi à chaque fois.

git checkout master
git pull
git checkout branch-name-to-be-merged
git pull
git checkout branch-name
git pull
git merge branch-name-to-be-merged
RNV
la source
Cela a fonctionné pour moi merci. Si c'est essentiellement la bonne solution: assurez-vous de vérifier la branche source avant d'essayer de la fusionner.
dps
11

Cela peut arriver parce que cette branche n'est pas sur votre section locale. avant de fusionner l'utilisation

git fetch origin
Alok Kamboj
la source
7

Vous obtenez cette erreur car la branche que vous souhaitez fusionner n'existe pas sur votre référentiel local.

Donc, commencez par extraire le brach que vous souhaitez fusionner dans la branche principale par la commande suivante:

git checkout branch_name_to_merge

Après cela, essayez de le fusionner avec la branche principale à l'aide de la commande suivante:

git merge branch_name_to_merge
Bilal Ahmed Yaseen
la source
2
Cela peut également arriver si vous ne faites pas attention au nom de votre succursale (c.-à-d. Mal orthographié) :)
Matt Borja
Cela a fonctionné pour moi. Lorsque je travaille dans Atom avec l'onglet Git et que je change de branche avec le menu déroulant, parfois je dois aller sur la ligne de commande et checkoutla branche
nzaleski
7

Cette erreur suggère que la branche à partir de laquelle vous souhaitez fusionner les modifications (c'est-à-dire dans votre cas le nom de la branche) n'est pas présente dans votre section locale, vous devez donc extraire la branche et récupérer les modifications locales. Passez à votre branche principale et récupérez, puis suivez les étapes ci-dessous:

git checkout branch-name
git pull
git checkout new-branch-name
git merge branch-name
Amar Magar
la source
Je vais être pointilleux et dire que je ne pense pas que le message d'erreur suggère quoi que ce soit ci-dessus :-)
Brian Agnew
7

Cette réponse n'est pas liée à la question ci-dessus, mais j'ai rencontré un problème similaire, et cela sera peut-être utile à quelqu'un. J'essaie de fusionner ma branche de fonctionnalité pour la maîtriser comme ci-dessous:

$ git merge fix-load

pour cela a obtenu le message d'erreur suivant:

fusion: fix-load - pas quelque chose que nous pouvons fusionner

J'ai surtout cherché des solutions, mais aucune n'a fonctionné.

Enfin, j'ai réalisé que la cause du problème est une faute d'orthographe sur le nom de ma branche (en fait, le nom de la branche de fusion est fix-loads).

yala ramesh
la source
4
Pour moi, l'ajout de l'origine a fonctionné. Prenant votre exemple, a git merge origin/fix-loadsfonctionné.
Ram Patra du
3

J'ai eu cette erreur lorsque j'ai fait un git merge BRANCH_NAME "some commit message"- j'avais oublié d'ajouter l'indicateur -m pour le message de validation, donc il pensait que le nom de la branche incluait le commentaire.

purement logique
la source
3

À mon avis, j'avais manqué de cartographier ma succursale locale avec un dépôt à distance. je l'ai fait ci-dessous et cela a bien fonctionné.

git checkout master
git remote add origin https://github.com/yourrepo/project.git
git push -u origin master
git pull
git merge myBranch1FromMain
Vinay Sharma
la source
2

Si la chaîne contenant la référence est produite par une autre commande Git (ou toute autre commande shell d'ailleurs), assurez-vous qu'elle ne contient pas de chariot de retour à la fin. Vous devrez le supprimer avant de passer la chaîne à "git merge".

Notez que cela est assez évident lorsque cela se produit, car le message d'erreur apparaît sur 2 lignes:

merge: 26d8e04b29925ea5b59cb50501ab5a14dd35f0f9
 - not something we can merge
ocroquette
la source
3
Veuillez fournir un commentaire lorsque vous avez voté contre une réponse. Peut-être que ce n'était pas le problème de l'affiche originale, mais c'est une cause possible du message d'erreur (j'ai eu le problème moi-même).
ocroquette
2

Nous avons eu cette erreur car nous avions une virgule (,) dans le nom de la branche. Nous avons supprimé la branche locale, puis l'avons revérifiée sous un nouveau nom sans la virgule. Nous avons réussi à le fusionner avec succès.

Doug
la source
Le soulignement semble également problématique. +1
Anders Lindén
1
J'utilise souvent des traits de soulignement dans les noms de succursales @ AndersLindén
nzaleski
et la parenthèse était problématique aussi ... + 1
Pablo Ezequiel
1

Pour la postérité: comme l'a dit AxeEffect ... si vous n'avez pas de faute de frappe, vérifiez si vous avez des caractères ridicules dans le nom de votre branche locale, comme des virgules ou des apostrophes. C'est exactement ce qui m'est arrivé tout à l'heure.

Elder Smash
la source
Ou souligner. +1
Anders Lindén
1

Je suggère de vérifier si vous pouvez passer à la branche avec laquelle vous essayez de fusionner.

J'ai eu cette erreur même si la branche avec laquelle je voulais fusionner était dans le référentiel local et qu'il n'y avait aucune erreur d'orthographe.

J'ai ignoré mes modifications locales pour pouvoir passer à la branche (Stash ou commit peut également être préféré). Après cela, je suis revenu à la branche initiale et la fusion a réussi.

eaykin
la source
0

Pour moi, le problème est survenu lorsque j'ai essayé ceci:

git merge -s ours --no-commit --allow-unrelated-histories <remote name>/develop

Donc, en fait, j'aurais dû écrire à la masterplace de develop, car master était le nom de branche de Subtree, pas ma branche réelle.

Levon Petrosyan
la source
0

Cela peut sembler étrange, mais n'oubliez pas de configurer votre email et votre nom git:

git config --global user.email "[email protected]"
git config --global user.name "FIRST_NAME LAST_NAME"
superarts.org
la source
0

Pour moi, le problème était les «doubles guillemets» dans le message de fusion. Donc, quand j'ai enlevé la double marque, tout fonctionnait comme par magie. J'espère aider quelqu'un. (Désolé pour mon mauvais anglais)

Aryelson Santos
la source
0

J'avais un arbre de travail avec maître et une autre branche vérifiée dans deux dossiers de travail différents.

PS C:\rhipheusADO\Build> git worktree list
C:/rhipheusADO/Build         7d32e6e [vyas-cr-core]
C:/rhipheusADO/Build-master  91d418c [master]

PS C:\rhipheusADO\Build> cd ..\Build-master\

PS C:\rhipheusADO\Build-master> git merge 7d32e6e #Or any other intermediary commits
Updating 91d418c..7d32e6e
Fast-forward
 Pipeline/CR-MultiPool/azure-pipelines-auc.yml | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

PS C:\rhipheusADO\Build-master> git ls-remote
From https://myorg.visualstudio.com/HelloWorldApp/_git/Build
53060bac18f9d4e7c619e5170c436e6049b63f25        HEAD
7d32e6ec76d5a5271caebc2555d5a3a84b703954        refs/heads/vyas-cr-core 

PS C:\rhipheusADO\Build-master> git merge 7d32e6ec76d5a5271caebc2555d5a3a84b703954
Already up-to-date

PS C:\rhipheusADO\Build>  git push
Total 0 (delta 0), reused 0 (delta 0)
To https://myorg.visualstudio.com/HelloWorldApp/_git/Build
   91d418c..7d32e6e  master -> master

Si vous devez simplement fusionner le dernier commit:

git merge origin/vyas-cr-core 
git push

Et c'est la même chose que ce que j'ai toujours fait:

git checkout master # This is needed if you're not using worktrees
git pull origin vyas-cr-core
git push
Vyas Bharghava
la source
0

La branche que vous essayez de fusionner peut ne pas être identifiée par votre git actuellement, alors effectuez git branch et voyez si la branche que vous souhaitez fusionner n'existe pas, sinon effectuez-la git pull et maintenant si vous le faites git branch, la branche sera visible maintenant, et maintenant vous jouezgit merge <BranchName>

yogeswaran
la source