Come risolvere l'errore "non qualcosa che possiamo unire" di git


291

Ho appena riscontrato un problema durante l'unione di un ramo in master in git. Innanzitutto, ho ottenuto il nome del ramo correndo git ls-remote. Chiamiamo quel ramo "nome-ramo". Ho quindi eseguito il git merge branch-namecomando e ho ottenuto il seguente risultato:

fatal: branch-name - not something we can merge

Come posso risolvere questo errore?

Risposte:


356

Come mostrato in Come nasce "non qualcosa che possiamo unire"? , questo errore può derivare da un errore di battitura nel nome del ramo perché stai tentando di estrarre un ramo che non esiste.

Se questo non è il problema (come nel mio caso), è probabile che tu non abbia una copia locale del ramo che desideri unire. Git richiede la conoscenza locale di entrambi i rami per unire quei rami. È possibile risolvere questo problema controllando il ramo da unire e quindi tornando al ramo in cui si desidera unire.

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

Questo dovrebbe funzionare, ma se ricevi un messaggio di errore

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

è necessario recuperare il telecomando (probabilmente, ma non necessariamente "origine") prima di estrarre il ramo:

git fetch remote-name

3
Questo è successo a me dopo aver aggiunto un nuovo telecomando - dovevo fare un git fetchprimo prima di unire il ramo remoto.
Jason

recupero e checkout ramo da remoto. git fetch && git checkout BranchName
Juni Brosas il

2
Questo è successo a me quando sono stato inserito nel progetto sbagliato (ovvero era un repository diverso che non aveva nemmeno il ramo che volevo unire)
JoelFan,

1
Se stai tentando di sincronizzare un fork dalla riga di comando ( help.github.com/articles/syncing-a-fork ), questo errore è probabilmente dovuto al fatto che hai perso il passaggio 0. Cosa? Non è elencato il passaggio 0? Sì, è per questo che è facile perdere. "Prima di poter sincronizzare il fork con un repository upstream, è necessario configurare un telecomando che punti al repository upstream in Git." <- questo è il passaggio 0. Se salti quel passaggio, ricevi l'errore sopra riportato, che probabilmente hai inserito in Google, che ti porta qui. :-)
Steve Bonds,

1
Git requires local knowledge of both branches in order to merge those branches
Gangadhar JANNU,

96

È un suggerimento sciocco, ma assicurati che non ci siano errori di battitura nel nome del ramo!


4
non così sciocco, poiché "typo" potrebbe ridurre al fatto che il ramo non è stato ancora recuperato (e quindi sconosciuto localmente) .. Git fa le cose in modo diverso rispetto a CVS o SVN ..
Klang

2
Il problema potrebbe anche essere causato se il nome del ramo contiene caratteri come virgole (,) o apostrofi (').
AxeEffect,

Assicurati anche di essere nel repository corretto o nella finestra / scheda del terminale, specialmente se lavori su più repository contemporaneamente.
totymedli,

71

Quando mi tiravo da un remoto monte, ha git fetch --allfatto il trucco per me:

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]

In altri casi, ho riscontrato che l'errore "Non qualcosa che possiamo unire" si verificherà anche se il ramo remoto (origine, upstream) non esiste. Questo potrebbe sembrare ovvio, ma potresti ritrovarti a fare git merge origin/developun repository che ha solo master.


5
Sinceramente non so perché questa risposta non abbia ottenuto tanti voti come sopra. 'git fetch -all' è il comando che in genere si manca per eseguire prima di unire un ramo remoto e che ha risolto il problema per me.
Dayanand Gowda,

2
Perché il recupero non si tira automaticamente e devi farlo manualmente. Quindi un paio prendere - tutto e tirare - tutto farà il trucco.
danielpopa,

Grazie! La git remote add upstreamcosa importante che mi mancava mi ha risolto il problema. Penso che un errore comune stia presupponendo che una forcella sappia automaticamente da dove è stata biforcuta.
Brent,

23

Ho avuto anche questo problema. Il ramo sembrava "nome utente / master" che sembrava confondere git come sembrava un indirizzo remoto che ho definito. Per me sto usando questo

git merge origin/username/master

ha funzionato perfettamente bene.


4
Ho dovuto mettere anche origin/il nome del ramo remoto.
AsGoodAsIt Ottiene il

Dovrai farlo se il nome del ramo ha una barra /.
CTS_AE,

21

Il metodo seguente funziona per me ogni volta.

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

Questo ha funzionato per me grazie. Questa è essenzialmente la soluzione giusta: sostanzialmente assicurati di avere verificato il ramo di origine prima di provare a unirlo.
dps

11

Può succedere perché quel ramo non è nel tuo locale. prima di unire l'uso

git fetch origin

7

Stai ricevendo questo errore perché il ramo che vuoi unire non esiste sul tuo repository locale.

Quindi, prima controlla il brach che vuoi unire nel ramo master con il seguente comando:

git checkout branch_name_to_merge

Successivamente, prova a unirlo con il ramo principale con il comando seguente:

git merge branch_name_to_merge

2
Questo può accadere anche se non stai prestando attenzione al nome del tuo ramo (ovvero, errori di ortografia) :)
Matt Borja,

Questo ha funzionato per me. Quando lavoro in Atom con la scheda Git e cambio i rami con il menu a discesa, a volte devo andare alla riga di comando e checkoutal ramo
nzaleski

7

Questo errore suggerisce che il ramo da cui si desidera unire le modifiche (ad esempio nel caso in cui nome-ramo) non sia presente in locale, quindi è necessario controllare il ramo e recuperare le modifiche locali. Esegui il checkout nel ramo principale e recupera, quindi procedi nel seguente modo:

git checkout branch-name
git pull
git checkout new-branch-name
git merge branch-name

Sarò pignolo e dirò che non credo che il messaggio di errore suggerisca qualcosa di simile a quanto sopra :-)
Brian Agnew,

6

Questa risposta non è correlata alla domanda di cui sopra, ma ho riscontrato un problema simile e forse questo sarà utile a qualcuno. Ho unito il mio ramo di funzionalità per padroneggiare come di seguito:

$ git merge fix-load

Ho ricevuto il seguente messaggio di errore:

merge: fix-load - non qualcosa che possiamo unire

Ho esaminato soprattutto le soluzioni, ma nessuna ha funzionato.

Ho scoperto che il problema era un errore di ortografia sul nome del mio ramo (in realtà, il nome del ramo di unione è fix-loads).


4
Per me, l'aggiunta di origine ha funzionato. Prendendo il tuo esempio, ha git merge origin/fix-loadsfunzionato.
Ram Patra,

3

Ho avuto questo errore quando ho fatto un git merge BRANCH_NAME "some commit message"- avevo dimenticato di aggiungere il flag -m per il messaggio di commit, quindi ho pensato che il nome del ramo includesse il commento.


3

Secondo me mi ero perso a mappare la mia filiale locale con repository remoto. ho fatto di seguito e ha funzionato bene.

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

2

Se la stringa contenente il riferimento è prodotta da un altro comando Git (o qualsiasi altro comando shell per quella materia), assicurarsi che non contenga un carrello di ritorno alla fine. Dovrai rimuoverlo prima di passare la stringa a "git merge".

Si noti che è abbastanza ovvio quando ciò accade, perché il messaggio di errore è su 2 righe:

merge: 26d8e04b29925ea5b59cb50501ab5a14dd35f0f9
 - not something we can merge

3
Fornisci un commento quando hai annullato la votazione di una risposta. Forse non è stato il problema del poster originale, ma è una possibile causa del messaggio di errore (ho avuto il problema da solo).
ocroquette,

2

Abbiamo ricevuto questo errore perché avevamo una virgola (,) nel nome del ramo. Abbiamo eliminato il ramo locale, quindi ricontrollato con un nuovo nome senza la virgola. Siamo riusciti a fonderlo con successo.


Anche Underscore sembra problematico. +1
Anders Lindén,

1
Uso spesso i trattini
bassi

e anche la parentesi era problematica ... + 1
Pablo Ezequiel

1

Per i posteri: come diceva AxeEffect ... se non hai errori di battitura controlla se hai caratteri ridicoli nel nome della tua filiale locale, come virgole o apostrofi. Esattamente quello che mi è successo proprio ora.


O sottolineatura. +1
Anders Lindén,

1

Suggerisco di verificare se si è in grado di passare al ramo con cui si sta tentando di unirsi.

Ho riscontrato questo errore anche se il ramo con cui volevo unirmi era nel repository locale e non c'erano errori di ortografia.

Ho ignorato le mie modifiche locali in modo da poter passare al ramo (si può anche preferire stash o commit). Dopo questo sono tornato al ramo iniziale e l'unione ha avuto successo.


0

Per me il problema si è verificato quando ho provato questo:

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

Quindi in realtà avrei dovuto scrivere masterinvece che develop, perché master era il nome del ramo di Subtree, non il mio ramo attuale.


0

Questo può sembrare strano, ma ricorda di impostare la tua email e il tuo nome git:

git config --global user.email "MY@EMAIL.COM"
git config --global user.name "FIRST_NAME LAST_NAME"

0

Per me, il problema erano le "virgolette doppie" nel messaggio di unione. Quindi, quando ho rimosso il doppio segno, tutto ha funzionato magicamente. Spero di aiutare qualcuno. (Scusa per il mio pessimo inglese)


0

Avevo un albero di lavoro con master e un altro ramo estratto in due diverse cartelle di lavoro.

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 devi solo unire l'ultimo commit:

git merge origin/vyas-cr-core 
git push

Ed è lo stesso di quello che ho sempre fatto:

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

0

Il ramo che stai cercando di unire potrebbe non essere identificato da Git al momento, quindi esegui git branch e vedi se esiste il ramo che vuoi unire, se non allora esegui git pull e ora se lo fai git branch, il ramo sarà ora visibile, e ora ti esibiscigit merge <BranchName>

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.