Como resolver o erro "não é algo que possamos mesclar" do git

291

Acabei de encontrar um problema ao mesclar uma ramificação no master no git. Primeiro, obtive o nome da ramificação executando git ls-remote. Vamos chamar esse ramo de "nome do ramo". Em seguida, executei o git merge branch-namecomando e obtive o seguinte resultado:

fatal: branch-name - not something we can merge

Como resolvo esse erro?

Brian
fonte

Respostas:

356

Como mostrado em Como "não podemos fundir algo", surge? , esse erro pode ocorrer devido a um erro de digitação no nome da ramificação, porque você está tentando extrair uma ramificação que não existe.

Se esse não for o problema (como no meu caso), é provável que você não tenha uma cópia local da ramificação que deseja mesclar. O Git requer conhecimento local de ambos os ramos para mesclar esses ramos. Você pode resolver isso verificando a ramificação para mesclar e, em seguida, voltando para a ramificação na qual deseja mesclar.

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

Isso deve funcionar, mas se você receber um erro dizendo

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

você precisa buscar o controle remoto (provavelmente, mas não necessariamente, "origem") antes de verificar a ramificação:

git fetch remote-name
Brian
fonte
3
Isto aconteceu-me depois de adicionar um novo controle remoto - que eu precisava fazer um git fetchprimeiro antes de se fundir o ramo remoto.
Jason
buscar e fazer check-out da filial do controle remoto. git fetch && git checkout BranchName
Juni Brosas
2
Isso aconteceu comigo quando eu estava cd'd no projeto errado (ou seja, era um repo diferente que nem sequer têm o ramo Eu queria merge)
JoelFan
1
Se você está tentando sincronizar uma bifurcação na linha de comando ( help.github.com/articles/syncing-a-fork ), esse erro provavelmente ocorre porque você perdeu a etapa 0. O que? Não há etapa 0 listada? Sim, é por isso que é fácil perder. "Antes de sincronizar seu fork com um repositório upstream, você deve configurar um controle remoto que aponte para o repositório upstream no Git." <- esse é o passo 0. Se você pular esse passo, receberá o erro acima, que você provavelmente inseriu no Google, levando você aqui. :-)
Steve Bonds
1
Git requires local knowledge of both branches in order to merge those branches
Gangadhar JANNU 20/03/19
96

É uma sugestão boba, mas verifique se não há erro de digitação no nome da filial!

sem fim
fonte
4
não tão bobo, como "erro de digitação" poderia reduzir ao fato de que o ramo não tem sido buscada ainda (e, portanto, desconhecido localmente) .. Git faz as coisas de forma diferente do CVS ou SVN ..
Klang
2
O problema também pode ser causado se o nome da ramificação contiver caracteres como vírgulas (,) ou apóstrofes (').
AxeEffect
Verifique também se você está no repositório correto ou na janela / guia do terminal, especialmente se você trabalha em vários repositórios simultaneamente.
totymedli
71

Ao puxar de um remoto rio acima, git fetch --allfiz o truque para mim:

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]

Em outros casos, encontrei o erro "Não é possível mesclar" também ocorrerá se o ramo remoto (origem, montante) não existir. Isso pode parecer óbvio, mas você pode se encontrar fazendo git merge origin/developem um repositório que apenas o possui master.

Eneko Alonso
fonte
5
Eu realmente não sei por que essa resposta não recebeu tantos votos quanto o anterior. 'git fetch -all' é o comando que normalmente falta executar antes de mesclar uma ramificação remota e que resolveu o problema para mim.
Dayanand Gowda 31/03
2
Como a busca não é puxada automaticamente e você deve fazer isso manualmente. Portanto, um par buscar - all & pull --all fará o truque.
Danielpopa
Obrigado! A git remote add upstreamera a coisa importante que eu estava faltando que resolveu isso por mim. Eu acho que um erro comum é assumir que um garfo sabe automaticamente de onde foi bifurcado.
Brent
23

Eu tive esse problema também. O ramo parecia 'nome de usuário / mestre', que parecia confundir o git, pois parecia um endereço remoto que eu defini. Para mim, usando isso

git merge origin/username/master

funcionou perfeitamente bem.

spekulatius
fonte
4
Eu tive que colocar origin/antes do nome do ramo remoto também.
AsGoodAsItGets
Você precisará fazer isso se o nome do ramo tiver uma barra /.
CTS_AE 17/10/19
21

O método abaixo funciona para mim o tempo todo.

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
fonte
Isso funcionou para mim, obrigado. I Esta é essencialmente a solução certa: basicamente, ter certeza de que o ramo fonte check-out antes de tentar fundi-lo no.
DPS
11

Isso pode acontecer porque esse ramo não está no seu local. antes de mesclar o uso

git fetch origin
Alok Kamboj
fonte
7

Você está recebendo este erro porque o ramo que você deseja mesclar não existe no seu repositório local.

Portanto, primeiro faça o checkout do brach que você deseja mesclar na ramificação principal pelo seguinte comando:

git checkout branch_name_to_merge

Depois disso, tente mesclá-lo com a ramificação mestre pelo seguinte comando:

git merge branch_name_to_merge
Bilal Ahmed Yaseen
fonte
2
Isso também pode acontecer se você não está prestando atenção ao nome do seu ramo (isto é incorreta) :)
Matt Borja
Isso funcionou para mim. Quando estou trabalhando em Atom com a guia Git e eu mudar ramos com a queda para baixo, às vezes eu tenho que ir para a linha de comando e checkouto ramo
nzaleski
7

Este erro sugere que o ramo de onde você deseja mesclar as alterações (por exemplo, no caso, nome-do-ramo) não está presente no seu local, portanto, você deve fazer check-out do ramo e buscar as alterações locais. Faça o checkout no seu ramo principal e busque e siga as etapas abaixo:

git checkout branch-name
git pull
git checkout new-branch-name
git merge branch-name
Amar Magar
fonte
Vou ser exigente e dizer que eu não acho que a mensagem de erro sugere nada como o acima :-)
Brian Agnew
6

Esta resposta não está relacionada à pergunta acima, mas enfrentei um problema semelhante, e talvez isso seja útil para alguém. Mesclei meu ramo de recursos para dominar como abaixo:

$ git merge fix-load

Recebi a seguinte mensagem de erro:

mesclar: fix-load - não é algo que possamos mesclar

Eu olhei acima de todas as soluções, mas nenhuma delas funcionou.

Achei que o problema era um erro de ortografia no nome da minha filial (na verdade, o nome da ramificação de mesclagem é fix-loads).

yala ramesh
fonte
4
Para mim, adicionar origem funcionou. Tomando o seu exemplo, git merge origin/fix-loadsfuncionou.
Ram Patra #
3

Eu recebi esse erro quando fiz um git merge BRANCH_NAME "some commit message"- eu tinha esquecido de adicionar o sinalizador -m para a mensagem de confirmação, por isso achava que o nome do ramo incluía o comentário.

puramente lógico
fonte
3

Na minha opinião, eu tinha perdido o mapa da minha filial local com repo remoto. eu fiz abaixo e funcionou bem.

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
fonte
2

Se a sequência que contém a referência é produzida por outro comando Git (ou qualquer outro comando shell), verifique se ela não contém um carro de retorno no final. Você precisará removê-lo antes de passar a string para "git merge".

Observe que é bastante óbvio quando isso acontece, porque a mensagem de erro aparece em duas linhas:

merge: 26d8e04b29925ea5b59cb50501ab5a14dd35f0f9
 - not something we can merge
ocroquette
fonte
3
Forneça um comentário quando você rebaixou uma resposta. Talvez não tenha sido o problema que o pôster original tinha, mas é uma possível causa da mensagem de erro (eu mesmo tive o problema).
Ocroquette
2

Obtivemos esse erro porque tínhamos uma vírgula (,) no nome do ramo. Excluímos a ramificação local e a verificamos novamente com um novo nome sem a vírgula. Conseguimos mesclá-lo com sucesso.

Doug
fonte
Sublinhado também parece problemático. +1
Anders Lindén
1
Eu uso sublinhado frequentemente em nomes do ramo @ AndersLindén
nzaleski
e parênteses também eram problemáticos ... + 1
Pablo Ezequiel
1

Para a posteridade: Como o AxeEffect disse ... se você não tiver erros de digitação, verifique se há caracteres ridículos no nome de sua filial local, como vírgulas ou apóstrofes. Exatamente isso aconteceu comigo agora.

Elder Smash
fonte
Ou sublinhado. +1
Anders Lindén
1

Eu sugiro verificar se você é capaz de mudar para o ramo que você está tentando mesclar.

Eu recebi esse erro mesmo que o ramo com o qual eu queria mesclar estivesse no repositório local e não houvesse erros de ortografia.

Eu ignorei minhas alterações locais para poder mudar para a ramificação (Stash ou commit também pode ser preferido). Depois disso, voltei ao ramo inicial e a fusão foi bem-sucedida.

eaykin
fonte
0

Para mim, o problema ocorreu quando tentei isso:

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

Então, na verdade, eu deveria ter escrito em mastervez de develop, porque master era o nome do ramo da subárvore, não o meu ramo real.

Levon Petrosyan
fonte
0

Isso pode parecer estranho, mas lembre-se de configurar seu e-mail e nome do git:

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

Para mim, o problema eram as 'aspas duplas' na mensagem de mesclagem. Então, quando eu removi a marca dupla, tudo funcionou magicamente. Espero ajudar alguém. (Desculpe pelo meu inglês ruim)

Aryelson Santos
fonte
0

Eu tinha uma árvore de trabalho com master e uma outra ramificação em duas pastas de trabalho diferentes.

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

Se você precisar mesclar apenas a confirmação mais recente:

git merge origin/vyas-cr-core 
git push

E é o mesmo que sempre fiz:

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

O ramo que você está tentando mesclar pode não ser identificado por você no momento, então execute git branch e veja se o ramo que você deseja mesclar existe, se não o for, se não o executar git pull e agora, se o fizer git branch, o ramo estará visível agora, e agora você executagit merge <BranchName>

yogeswaran
fonte