Não é possível enviar para o branch remoto, não pode ser resolvido para o branch

110

Migrei meus repos do Bitbucket ou Github. Não acho que isso importe, mas é a única coisa diferente ... Por um tempo eu tive dois controles remotos configurados:

origin: bitbucket
github: github

Então eu removi ambos e apontei a origem para o github:

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

Push de teste do branch de desenvolvimento:

git push origin develop

Tudo em dia, tudo bem.

Crie um novo branch para algum trabalho como de costume:

git checkout -b Feature/Name

Atualize um ou dois arquivos. Tente empurrar para remoto:

git push origin Feature/Name

Isso resulta no erro:

fatal: recurso / nome não pode ser resolvido para ramificação

Pesquise on-line por esse problema, encontre algumas informações sobre como garantir que o HEAD está correto, outras sobre como ter certeza de que a caixa do nome do meu branch está correta (embora, neste ponto, o branch ainda não exista no remoto). Incapaz de resolver.

Executou este comando:

git push --all -u

Isso levou meu Feature/Namebranch para o github, mas ainda vejo o mesmo comportamento de antes:

git push origin develop
git push origin Feature/Name

O primeiro funciona, o segundo lança o mesmo erro.

Não consigo descobrir por que estou recebendo esse erro. Alguma ideia?

jleach
fonte
1
Em que branch você estava quando fez Feature/Name? Tem certeza de que Feature/Name existe e esse é o branch com check-out? Verifique com git branch.
Schwern
@Schwern - Existiam apenas três branches (localmente e remotamente): desenvolvimento, teste e master. Depois que um branch é limpo e mesclado de volta para o desenvolvimento, eu os excluo localmente (e remotamente, se aplicável). Tenho certeza de que eram apenas os meus três - não abro o projeto há algum tempo e a primeira coisa que fiz foi verificar se não havia galhos soltos.
jleach
Isso significa que você correu git branchpara verificar se Feature/Nameexiste localmente? Não confie em uma GUI ou IDE. Além disso, você entendeu o caso certo?
Schwern
Que tal git push origin Feature/Name:Feature/Name?
ElpieKay
Agora estou chateado ... não tenho certeza por que não funcionou em primeiro lugar, mas depois de usar git push --all -ueu tenho o novo branch no github, mas ainda não consegui empurrar do local, certo? Aqui está o que aconteceu com isso ... o nome do branch real é SQLMigration/ReportFixese o que está no github é SqlMigration/ReportFixes. Então, agora eu posso git push origin SqlMigration/ReportFixes- por que o github muda a caixa para mim? Agh.
jleach

Respostas:

376

Eu também estava tendo esse problema e isso estava me deixando louco. Eu tinha algo parecido, feature/namemas git branch -ame mostrou FEATURE/name. Renomeando o branch, excluindo e recriando, nada funcionou. O que finalmente resolveu:

Entrar .git/refs/heads

Você verá uma FEATUREpasta. Renomeie-o para feature.

Ty Le
fonte
4
Esta foi a resposta correta para mim. Estava usando gitbash no windows e tinha criado feature / some-feature e Feature / some-feature.
Dylan McCurry
Essa deve ser marcada como a resposta correta. Me ajudou. Obrigado!
GuiDoody de
21
Eu te devo cerveja por essa resposta! : D
Vojta
1
Uau, boa pegada. Me economizou muito tempo. Obrigado !
Piyush
2
@Pegues - pronto. Eu não acho que essa resposta existiu até muito depois que eu tive o problema, mas parece ser a mais popular, então aí está.
jleach
30

Com base em meus próprios testes e nos comentários do OP , acho que em algum momento eles erraram sobre a caixa do nome do ramo.

Em primeiro lugar, acredito que o OP está em um sistema operacional que não diferencia maiúsculas de minúsculas, como o OS X ou o Windows. Então eles fizeram algo assim ...

$ 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.

Observe a diferença de revestimento. Observe também que o erro é muito diferente de se você apenas digitar o nome.

$ 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'

Como o Github usa o sistema de arquivos para armazenar nomes de ramos, ele tenta abrir .git/refs/heads/SqlMigration/ReportFixes. Como o sistema de arquivos não faz distinção entre maiúsculas e minúsculas, ele é aberto com êxito, .git/refs/heads/SqlMigration/ReportFixesmas fica confuso quando tenta comparar os nomes dos ramos com distinção entre maiúsculas e minúsculas e eles não correspondem.

Não tenho certeza de como eles chegaram a um estado em que fica a filial local SQLMigration/ReportFixese a filial remota SqlMigration/ReportFixes. Não acredito que o Github mexeu com o nome do ramo remoto. A explicação mais simples é que outra pessoa com acesso push alterou o nome do branch remoto. Caso contrário, em algum momento eles fizeram algo que conseguiu criar o controle remoto com o erro de digitação. Se verificarem seu histórico de shell, talvez com history | grep -i sqlmigration/reportfixeseles possam encontrar um comando onde digitaram incorretamente o invólucro.

Schwern
fonte
Eu tive esse problema quando mudei a caixa dos caracteres no nome do branch no OS X. Mudá-los de volta resolveu o problema.
Steven C. Howell
Isso também pode acontecer quando você tem um branch anterior, digamos AM-xxx / some_branch, e então cria outro AM-XXX / another_branch, o git permitirá os casos diferentes localmente e falhará em emparelhar os dois remotamente.
timpwbaker
Sim, é possível fazer o check-out na caixa mista errada, mas não o check-in .. Apenas bagunçado.
javadba
12

O Git permitirá que você verifique o branch atual com um caso diferente e não conseguirá encontrar um ref no remoto.

Só descobri da maneira mais difícil.

moggers
fonte
1
esse era o meu problema. Eu sugeriria fazer um rápido > git branche verificar se o seu branch tem um * próximo a ele.
Andy Danger Gagne
Isso também me aconteceu. @AndyDangerGagne, fico feliz que você tenha sugerido isso - não havia * ao lado do branch em que eu estava, então verifiquei novamente, desta vez em letras minúsculas.
Cognitiaclaeves
9

Uma coisa semelhante aconteceu comigo. Eu criei um branch chamado algo como "Feat / name". Tentei empurrar usando:

git push --set-upstream origin talento / nome

Recebi o mesmo erro fatal que você:

fatal: Feat / name não pode ser resolvido para branch

Para resolver eu criei um novo branch pois tive poucos arquivos impactados. Então eu listei meus branches para deletar o errado e ele apareceu sem tampa:

  • talento / nome

Eu já havia usado bonés antes, mas nunca no primeiro caractere. Parece que o git não gostou ...

JGL
fonte
Tive o mesmo caso THX: D
abdoutelb
5

É sensível a maiúsculas e minúsculas, apenas certifique-se de que o branch criado e o push to branch estão na mesma capital.

Exemplo:

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

Maneira ERRADA de fazer:

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

Maneira CORRETA de fazer:

git push origin TASK-135-hello-world
Sher
fonte
2

Talvez você tenha esquecido de executar o git fetch? é necessário buscar dados do repositório remoto! Tente corrergit fetch remote/branch

palhaço
fonte
2

Para o meu caso, eu costumava ter uma pasta de branch (ou como é chamada) com letras maiúsculas, então eu crio um novo com letras maiúsculas (minúsculas), mas git realmente cria o branch com maiúsculas.

Eu criei um branch como feature-ABC/branch1antes e empurrei-o. Em seguida, crio um branch feature-abc/branch2(observe o ABC em minúsculas) e tento colocá-lo no controle remoto usando git push --set-upstream origin feature-abc/branch2e recebo o erro 'não pode ser resolvido para o branch'. Então eu git branche vejo que realmente criou em feature-ABC/branch2vez de feature-abc/branch1para mim. Eu faço checkout novamente com git checkout feature-ABC/feature2e empurro usando maiúsculas ( feature-ABC/feature2) para resolver.

Vee Trairattanapa
fonte
2

Eu enfrentei o mesmo problema que era devido à ramificação com invólucro errado. git deixe-me mudar para branch com caixa incorreta, ou seja, em feature/Namevez de feature/name. Encontrou uma solução mais fácil do que a listada acima apenas:

  • comprometa suas alterações para 'recurso / nome'
  • git checkout master (or develop)
  • git checkout feature/name <com caixa correta
  • git push
Corbin Hudson
fonte
2

Resolvi isso no Windows 10 usando cmd em vez de GitBash .

Tem a ver com maiúsculas e minúsculas e como git e linhas de comando os tratam.

jmojico
fonte
1

Você pode ter criado um branch semelhante, mas com diferenciação de maiúsculas e minúsculas, então você deve executar:

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

e tente empurrar novamente.

loko
fonte
1

Resposta ligeiramente modificada de @Ty Le:

nenhuma mudança nos arquivos foi necessária para mim - eu tinha um branch chamado 'Feature / ...' e enquanto empurrava o upstream mudei o título para 'feature / ...' (o caso da primeira letra foi alterado para o inferior )

Ryzhman
fonte
0

Eu também tive esse problema e meus branches normais começam com, pb-3.1-12345/namebranchmas acidentalmente coloquei as 2 primeiras letras em maiúscula PB-3.1/12345/namebranch. Depois de renomear o branch para usar letras minúsculas, eu pude criar o branch.

Peter Boomsma
fonte
0

para mim eu estava nomeando branch como

Rel4.6 / bug / Uma breve descrição

tudo que eu tive que fazer foi quando usar

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

escrever

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

como eu costumava criar branches usando a letra r minúscula em rel.

então, o que causou esse problema?

quando listei .git/refs/headsconteúdo encontrei

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

mas não Relx.x!

e dentro dele buge dentro bugdo nome do meu ramo.

Então, git tente criar um diretório com o mesmo nome, mas com letras maiúsculas diferentes

mas o sistema não diferencia maiúsculas de minúsculas.

Isso é o que causou esse problema!

KhogaEslam
fonte
0

Tive o mesmo problema com revestimento diferente.

Fiz uma verificação para o desenvolvimento (ou master) e depois alterei o nome (o nome errado) para algo como teste.

  • desenvolvimento de checkout git
  • git branch -m teste de nome errado

então mude o nome de volta para o nome correto

  • git branch -m test right-name

em seguida, check-out para o branch com nome correto

  • git checkout right-name

então funcionou para empurrar para o branch remoto

  • git push origin direito-nome
Jim Nervall
fonte
0

Para mim, o problema era que eu tinha git e meu sistema de arquivos macOS configurados para duas sensibilidades de maiúsculas e minúsculas diferentes. Meu Mac foi formatado como APFS / diferencia maiúsculas de minúsculas: NÃO, mas eu havia invertido minhas configurações git em algum ponto tentando resolver um problema estranho com a nomenclatura de ativos de imagem Xcode, então git config --global core.ignorecase false . Virando-o de volta, alinhei as configurações e recriando o galho e empurrando me trouxe de volta aos trilhos.

git config --global core.ignorecase true

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

Michael
fonte
0

Tive o mesmo problema mas foi resolvido. Percebi que o nome do ramo diferencia maiúsculas de minúsculas. O branch principal no GitHub é 'master', enquanto no meu comando gitbash é 'Master'. Mudei o nome de Master no repositório local para master e funcionou! 😀😀

Waswa Rodgers
fonte
0

Encontrei o mesmo problema e percebi que confundi o invólucro ao verificar o galho. Eu fiz check-out em branchNamevez de BranchNamee quando tentei empurrar para remoto, recebi o mesmo erro.

O conserto:

git push --set-upstream origin BranchName

Ao configurar o upstream com o nome correto, o branch correto foi atualizado no github e eu fui capaz de verificar o nome do branch correto com

git checkout BranchName 

E deve estar atualizado com seu último empurrão.

bediV5
fonte
-1

Se você estiver no branch local, pode renomear o branch "Feature / Name" para "feature / Name"

git -m feature/Name

se você tiver problemas para fazer um git pushcheckout em outro branch (por exemplo, desenvolver) e retornar ao branch renomeado

git checkout feature/Name

e tente novamente o seu git push

Ronaldo Albertini
fonte