Impossibile eseguire il push al ramo remoto, non può essere risolto al ramo


110

Ho migrato i miei repository da Bitbucket o Github. Non credo che questo importi, ma è l'unica cosa diversa ... Per un po 'ho impostato due telecomandi:

origin: bitbucket
github: github

Quindi ho rimosso entrambi e ho indicato l'origine su GitHub:

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

Testare il push del ramo di sviluppo:

git push origin develop

Tutto aggiornato, ok, bene.

Crea un nuovo ramo per un po 'di lavoro come al solito:

git checkout -b Feature/Name

Aggiorna uno o due file. Tenta di eseguire il push in remoto:

git push origin Feature/Name

Ciò si traduce nell'errore:

irreversibile: funzione / nome non può essere risolto nel ramo

Cerca questo problema online, trova alcune cose su come assicurarti che HEAD sia corretto, altre su come assicurarti che il mio nome di filiale sia corretto (anche se, a questo punto, il ramo non esiste ancora sul telecomando). Impossibile risolvere.

Ha eseguito questo comando:

git push --all -u

Questo ha portato il mio Feature/Nameramo su GitHub, ma continua a vedere lo stesso comportamento di prima:

git push origin develop
git push origin Feature/Name

Il primo funziona, il secondo genera lo stesso errore.

Non riesco a capire perché ricevo questo errore. Qualche idea?


1
Su quale ramo eri quando l'hai fatto Feature/Name? Sei sicuro che Feature/Name esista e che sia la filiale controllata? Verificare con git branch.
Schwern

@Schwern - Esistevano solo tre rami (localmente e in remoto): sviluppo, test e master. Una volta che un ramo è stato ripulito e ricongiunto per svilupparlo, li elimino localmente (e in remoto se applicabile). Sono certo che c'erano solo i miei tre - non ho aperto il progetto da un po 'e la prima cosa che ho fatto è stata controllare e assicurarmi di non avere rami sciolti.
jleach

Significa che sei corso git brancha verificare che Feature/Nameesista localmente? Non fidarti di una GUI o di un IDE. Inoltre, hai capito bene il caso?
Schwern

Che ne dici git push origin Feature/Name:Feature/Name?
ElpieKay

Ora sono incazzato ... non sono sicuro del motivo per cui non ha funzionato in primo luogo, ma dopo averlo usato git push --all -uho il nuovo ramo in GitHub, ma non riesco ancora a eseguire il push da locale, giusto? Ecco cosa è successo con quello ... il nome effettivo del ramo è SQLMigration/ReportFixese ciò che è in GitHub è SqlMigration/ReportFixes. Quindi, ora posso git push origin SqlMigration/ReportFixes- perché GitHub cambia maiuscolo per me? Agh.
jleach

Risposte:


379

Anch'io avevo questo problema e mi stava facendo impazzire. Avevo qualcosa di simile feature/namema git branch -ame lo ha mostrato FEATURE/name. Rinominando il ramo, eliminandolo e ricreando, non ha funzionato nulla. Cosa lo ha risolto finalmente:

Entra .git/refs/heads

Vedrai una FEATUREcartella. Rinominalo in feature.


4
Questa è stata la risposta corretta per me. Stava usando gitbash su Windows e aveva creato feature / some-feature e Feature / some-feature.
Dylan McCurry

Questo dovrebbe essere contrassegnato come la risposta corretta. Mi ha aiutato. Grazie!
GuiDoody

21
Ti devo birra per questa risposta! : D
Vojta

1
Wow, bella cattura. Mi ha fatto risparmiare un sacco di tempo. Grazie !
Piyush

2
@Pegues - fatto. Non penso che questa risposta sia esistita fino a molto tempo dopo che ho avuto il problema, ma sembra essere quella popolare, quindi eccoti.
jleach

30

Sulla base dei miei test e dei commenti dell'OP , penso che a un certo punto abbiano scherzato sull'involucro del nome del ramo.

Innanzitutto, credo che l'OP sia su un sistema operativo senza distinzione tra maiuscole e minuscole come OS X o Windows. Poi hanno fatto qualcosa del genere ...

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

Nota la differenza dell'involucro. Nota inoltre che l'errore è molto diverso da quello che si verifica se si digita semplicemente il nome.

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

Poiché Github utilizza il filesystem per memorizzare i nomi dei rami, tenta di aprirsi .git/refs/heads/SqlMigration/ReportFixes. Poiché il filesystem non fa distinzione tra maiuscole e minuscole, si apre con successo .git/refs/heads/SqlMigration/ReportFixesma si confonde quando cerca di confrontare i nomi dei rami in modo sensibile alle maiuscole e alle minuscole e non corrispondono.

Non sono sicuro di come siano entrati in uno stato in cui si trova il ramo locale SQLMigration/ReportFixese quello remoto SqlMigration/ReportFixes. Non credo che Github abbia incasinato il nome del ramo remoto. La spiegazione più semplice è che qualcun altro con accesso push ha cambiato il nome del ramo remoto. Altrimenti, a un certo punto hanno fatto qualcosa che è riuscito a creare il telecomando con l'errore di battitura. Se controllano la cronologia della shell, forse history | grep -i sqlmigration/reportfixespotrebbero essere in grado di trovare un comando in cui hanno digitato male il case.


Mi sono imbattuto in questo problema quando ho cambiato il caso dei caratteri nel nome del ramo su OS X. La loro modifica ha risolto il problema.
Steven C. Howell

Questo può accadere anche quando hai un ramo precedente, ad esempio AM-xxx / some_branch, e quindi ne crei un altro AM-XXX / another_branch, git consentirà i diversi casi localmente e non riuscirà ad accoppiare i due in remoto.
timpwbaker

Sì, è possibile effettuare il check-out nel caso misto sbagliato ma non il check-in .. Semplicemente disordinato.
javadba

12

Git ti consentirà di effettuare il checkout del ramo corrente con un case diverso e non riuscirà a trovare un riferimento sul telecomando.

L'ho appena scoperto nel modo più duro.


1
questo era il mio problema. Suggerirei di fare un rapido > git branche verificare che il tuo ramo abbia un * accanto ad esso.
Andy Danger Gagne

Questo è successo anche a me. @ AnddyDangerGagne, sono contento che tu l'abbia suggerito: non c'era * accanto al ramo su cui mi trovavo, quindi l'ho controllato di nuovo, questa volta in lettere minuscole.
Cognitiaclaeves

9

A me è successa una cosa simile. Ho creato un ramo chiamato qualcosa come "Feat / name". Ho provato a spingerlo usando:

git push --set-upstream origin feat / nome

Ho ricevuto lo stesso errore fatale di te:

fatale: il talento / nome non può essere risolto in ramo

Per risolverlo ho creato un nuovo ramo poiché avevo pochissimi file interessati. Quindi ho elencato i miei rami per eliminare quello sbagliato e viene visualizzato senza limite:

  • impresa / nome

Avevo già usato berretti prima, ma mai sul primo carattere. Sembra che a git non piaccia ...


Ho avuto lo stesso caso THX: D
abdoutelb

5

Fa distinzione tra maiuscole e minuscole, assicurati solo che il ramo creato e il push to branch siano entrambi nella stessa capitale.

Esempio:

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

Modo SBAGLIATO di fare:

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

Modo CORRETTO di fare:

git push origin TASK-135-hello-world

2

Forse ti sei dimenticato di eseguire git fetch? è necessario per recuperare i dati dal repository remoto! Prova a correregit fetch remote/branch


2

Nel mio caso, avevo una cartella di ramo (o come si chiama) con lettere maiuscole, quindi ne creo una nuova con lettere maiuscole (minuscole) ma git effettivamente crea il ramo con la maiuscola.

Ho creato un ramo come feature-ABC/branch1prima e l'ho spinto. Quindi creo un ramo feature-abc/branch2(nota l'ABC minuscolo) e provo a inviarlo in remoto usando git push --set-upstream origin feature-abc/branch2e ottengo l'errore "Impossibile risolvere il ramo". Quindi git branchvedo che è stato effettivamente creato feature-ABC/branch2invece che feature-abc/branch1per me. Eseguo di nuovo il checkout git checkout feature-ABC/feature2e lo spingo usando le maiuscole ( feature-ABC/feature2) per risolverlo.


2

Ho affrontato lo stesso problema dovuto alla filiale con involucro sbagliato. git fammi passare a branch con case non corretto, esfeature/Name invece di feature/name. Ho trovato una soluzione più semplice di quella sopra elencata:

  • applica le modifiche a "funzione / nome"
  • git checkout master (or develop)
  • git checkout feature/name <con involucro corretto
  • git push

2

Ho risolto questo problema in Windows 10 utilizzando cmd invece di GitBash .

Ha a che fare con le maiuscole / minuscole e come le gestiscono git e le righe di comando.


1

Potresti aver creato un ramo simile ma con distinzione tra maiuscole e minuscole, quindi devi eseguire:

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

e poi prova a spingere di nuovo.


1

Risposta leggermente modificata di @Ty Le:

non sono state richieste modifiche ai file per me - avevo un ramo chiamato 'Feature / ...' e mentre spingevo a monte ho cambiato il titolo in 'feature / ...' (il caso della prima lettera è stato cambiato in quello inferiore ).


0

Ho appena avuto anche questo problema e i miei rami normali iniziano con pb-3.1-12345/namebranchma ho accidentalmente scritto in maiuscolo le prime 2 lettere PB-3.1/12345/namebranch. Dopo aver rinominato il ramo per utilizzare lettere minuscole, potrei creare il ramo.


0

per me ho chiamato branch come

Rel4.6 / bug / Alcuni-breve descrizione

tutto quello che dovevo fare era usare

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

scrivere

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

come ho usato per creare rami usando la lettera r minuscola in rel.

quindi, cosa ha causato questo problema?

quando ho elencato i .git/refs/headscontenuti che ho trovato

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

ma no Relx.x !

e dentro buge dentrobug il nome del mio ramo.

Quindi, git prova a creare una directory con lo stesso nome ma lettere maiuscole diverse

ma il sistema non fa distinzione tra maiuscole e minuscole.

Questo è ciò che ha causato questo problema!


0

Ho avuto lo stesso problema con un involucro diverso.

Ha fatto un checkout allo sviluppo (o al master), quindi ha cambiato il nome (il nome sbagliato) in qualcos'altro come test.

  • sviluppo di git checkout
  • git branch -m test con nome errato

quindi modificare nuovamente il nome con il nome corretto

  • git branch -m test right-name

quindi effettua il checkout al ramo del nome corretto

  • git checkout right-name

poi ha funzionato per eseguire il push al ramo remoto

  • git push origin right-name

0

Per me, il problema era che avevo git e il mio filesystem macOS impostato su due diverse sensibilità per i casi. Il mio Mac è stato formattato APFS / Is Case-Sensitive: NO, ma a un certo punto avevo invertito le mie impostazioni di git cercando di superare uno strano problema con la denominazione delle risorse di immagine Xcode, quindi git config --global core.ignorecase false . Capovolgendolo indietro ho allineato le impostazioni e ricreando il ramo e spingendo mi ha riportato in carreggiata.

git config --global core.ignorecase true

Credito: https://www.hanselman.com/blog/GitIsCasesensitiveAndYourFilesystemMayNotBeWeirdFolderMergingOnWindows.aspx


0

Ho avuto lo stesso problema ma è stato risolto. Mi sono reso conto che il nome del ramo fa distinzione tra maiuscole e minuscole. Il ramo principale in GitHub è "master", mentre nel mio comando gitbash è "Master". Ho rinominato Master nel repository locale in master e ha funzionato! 😀😀


0

Mi sono imbattuto nello stesso problema e ho notato che avevo confuso l'involucro durante il controllo del ramo. Ho controllato branchNameinvece di BranchNamee quando ho provato a eseguire il push in remoto, ho ricevuto lo stesso errore.

La correzione:

git push --set-upstream origin BranchName

Impostando a monte il nome corretto, il ramo corretto è stato aggiornato su GitHub e sono stato quindi in grado di controllare il nome del ramo corretto con

git checkout BranchName 

E dovrebbe essere aggiornato con la tua ultima spinta.


-1

Se sei in una filiale locale, potresti rinominare la filiale "Caratteristica / Nome" in "Caratteristica / Nome"

git -m feature/Name

se hai problemi a creare un file git push checkout in un altro ramo (ex sviluppo) e tornare al ramo rinominato

git checkout feature/Name

e riprova il tuo git push

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.