Cosa significa
Il tuo upstream - il telecomando che chiami - origin
non ha più, o forse non ha mai avuto (è impossibile distinguere da queste informazioni da solo) un ramo chiamato feature/Sprint4/ABC-123-Branch
. C'è una ragione particolarmente comune per questo: qualcuno (probabilmente non tu, o ricorderai) ha eliminato il ramo in quell'altro repository Git.
Cosa fare
Questo dipende da cosa vuoi . Vedi la sezione di discussione qui sotto. Puoi:
- creare o ricreare il ramo sul telecomando o
- eliminare la filiale locale o
- qualsiasi altra cosa ti venga in mente.
Discussione
Devi essere in esecuzione git pull
(se stavi funzionando git merge
otterrai un messaggio di errore diverso o nessun messaggio di errore).
Quando corri git fetch
, il tuo Git contatta un altro Git, in base alla url
linea nella [remote "origin"]
sezione della tua configurazione. Che Git esegue un comando ( upload-pack
) che, tra le altre cose, invia il tuo Git un elenco di tutte le filiali. Puoi usare git ls-remote
per vedere come funziona (provalo, è educativo). Ecco un frammento di ciò che ottengo quando eseguo questo su un repository Git per git
se stesso:
$ git ls-remote origin
From [url]
bbc61680168542cf6fd3ae637bde395c73b76f0f HEAD
60115f54bda3a127ed3cc8ffc6ab6c771cbceb1b refs/heads/maint
bbc61680168542cf6fd3ae637bde395c73b76f0f refs/heads/master
5ace31314f460db9aef2f1e2e1bd58016b1541f1 refs/heads/next
9e085c5399f8c1883cc8cdf175b107a4959d8fa6 refs/heads/pu
dd9985bd6dca5602cb461c4b4987466fa2f31638 refs/heads/todo
[snip]
Le refs/heads/
voci elencano tutti i rami esistenti sul telecomando, 1 insieme ai corrispondenti ID di commit (per le refs/tags/
voci gli ID possono puntare a contrassegnare oggetti anziché a commit).
Il tuo Git prende ciascuno di questi nomi di diramazione e lo cambia in base alle fetch
linee nella stessa remote
sezione. In questo caso, il Git sostituisce refs/heads/master
con refs/remotes/origin/master
, per esempio. Il tuo Git lo fa con ogni nome di ramo che si presenta.
Registra anche i nomi originali nel file speciale FETCH_HEAD
(puoi vedere questo file se sbirri nella tua .git
directory). Questo file salva i nomi e gli ID recuperati.
Il git pull
comando è inteso come una scorciatoia per praticità: viene eseguito git fetch
sul telecomando appropriato e quindi git merge
(o, se richiesto, git rebase
) con qualsiasi argomento necessario per unire (o rebase) come indicato dalla [branch ...]
sezione. In questo caso, la tua [branch "feature/Sprint4/ABC-123-Branch"]
sezione dice di recuperare da origin
, quindi unire con qualsiasi ID trovato sotto il nome refs/heads/feature/Sprint4/ABC-123-Branch
.
Dal momento che non è stato trovato nulla con quel nome, si git pull
lamenta e si ferma.
Se lo avessi eseguito in due passaggi separati, git fetch
e quindi git merge
(o git rebase
), Git avrebbe esaminato i tuoi remotes/origin/
rami di tracciamento remoto memorizzati nella cache per vedere in che cosa fondersi o in cui rifarsi. Se non ci fosse tale succursale un in una sola volta, si può ancora avere il ramo a distanza-tracking. In questo caso non si riceverà un messaggio di errore. Se non ci fosse mai un ramo di questo tipo, o se si è eseguito git fetch
con --prune
(che rimuove i rami morti di tracciamento remoto), in modo da non avere un ramo di tracciamento remoto corrispondente, si otterrebbe un reclamo, ma si farebbe origin/feature/Sprint4/ABC-123-Branch
invece riferimento .
In entrambi i casi , possiamo concludere che feature/Sprint4/ABC-123-Branch
ora non esiste sul telecomando denominato origin
.
Probabilmente esisteva contemporaneamente e probabilmente hai creato il tuo ramo locale dal ramo di tracciamento remoto. In tal caso, probabilmente hai ancora il ramo di tracciamento remoto. Potresti indagare per vedere chi ha rimosso il ramo dal telecomando e perché, oppure potresti semplicemente spingere qualcosa per ricrearlo o eliminare il ramo di monitoraggio remoto e / o il ramo locale.
1 Beh, almeno tutto ciò che ammetterà . Ma a meno che non abbiano nascosto in modo specifico alcuni riferimenti, l'elenco include tutto.
Modifica, luglio 2020: c'è un nuovo protocollo di recupero che può evitare di elencare tutto , e elenca solo i nomi che Git dice che sta cercando. Questo può aiutare con i repository che hanno un numero enorme di filiali e / o tag. Tuttavia, se il tuo Git è interessato a tutti i nomi possibili, otterrai comunque tutti i nomi qui.