Errore di Git su git pull (impossibile aggiornare il riferimento locale)


116

Ho solo branch master e ottengo questo errore ogni volta che provo a "git pull":

error: Couldn't set refs/remotes/origin/master
From /var/lib/git/xxx/project
 ! a0f80ea..49177a3  master     -> origin/master  (unable to update local ref)

e quando faccio "git pull origin master" ottengo:

error: Couldn't set ORIG_HEAD
fatal: Cannot update the ref 'ORIG_HEAD'.

ho cercato ma non riesco a trovare il motivo


2
Dov'è il repository locale? Lo hai creato come un utente diverso da quello che stai utilizzando per eseguire il pull? Sembra un problema di autorizzazione dei file.
tpg2114

Sì, hai subito dopo aver detto che il proprietario dei file di progetto era un altro utente, ora la mia domanda sembra così sciocca, ma mi hai dato la risposta, per favore
rendila

per favore @ tpg2114 aggiungi questo come risposta per averlo scelto
user115561

Risposte:


263

Il mio team e io ci siamo imbattuti in questo errore, incapace di aggiornare il riferimento locale , durante un pull in SourceTree.

Abbiamo usato :

git gc --prune=now

Ciò rimuove qualsiasi oggetto di riferimento duplicato che dovrebbe risolvere il problema.

Di seguito sono riportati alcuni collegamenti in cui è possibile ottenere ulteriori informazioni sui riferimenti e l'eliminazione di git :

consiglio git della settimana

documentazione git-prune

riferimenti a git


1
Ha funzionato anche per me, stesso messaggio, Sourcetree su Windows 7
James Westgate

2
ho appena iniziato ad avere anche questo problema. Grazie mille! ha funzionato perfettamente!
ddrossi93

3
Potrebbe essere necessario entrambi questi comandi: git gc --prune=now git remote prune originda stackoverflow.com/questions/2998832/…
bryan

1
Ho provato git remote prune origine non ha funzionato per me. Ma dopo averlo provato git gc --prune=now, ha funzionato! Non sono sicuro se entrambi fossero necessari in quell'ordine, o solo questo.
Anurag

1
Ancora un altro problema criptico con gitciò porta a un utile post StackOverflow con una soluzione concisa.
ijoseph

129

Ho risolto come di seguito:

git remote prune origin


6
Eureka! In effetti ha funzionato. Ha qualcosa a che fare con rami rinominati remoti o qualcosa del genere. Non cercherò di spiegarlo.
TheSoftwareJedi

8
Questo ha funzionato per me, git gc --prune=nownon ha fatto nulla
Josh G

3
stesso. questo funziona per me. git gc --prune = ora non ha funzionato per me.
Tony

16

con gitbach line commande, utilizzare git update-refper aggiornare il riferimento della filiale locale:

$ git update-ref -d refs/remotes/origin/[locked branch name]

quindi tirare usando $ git pull

[locked branch name] è il nome del ramo in cui si è verificato l'errore a causa della mancata corrispondenza degli ID commit.


13

Prova a utilizzare questo comando nella cartella principale del tuo repository git:

rm .git/logs/refs/remotes/origin/master 

Dov'è questa cartella su Windows?
Kolob Canyon

L'ho trovato. È la directory in cui hai clonato
Kolob Canyon,

12

Ho scoperto lo stesso messaggio di errore cercando di estrarre da un repository Bitbuck nella mia copia locale. C'è anche un solo Branche Master e il comando git pull origin masterporta a questo messaggio di errore

From https://bitbucket.org/xxx
 * branch            master     -> FETCH_HEAD
error: Couldn't set ORIG_HEAD
fatal: Cannot update the ref 'ORIG_HEAD'.

Soluzione come segue

  1. git reflog trova il numero dell'ultimo commit
  2. git reset --hard <numnber> resetta all'ultimo commit
  3. git pull origin master tirare di nuovo senza errori

10

rm .git/refs/remotes/origin/master

Per me funziona!


8

Assicurati che l'utente che sta eseguendo git pullsia lo stesso utente che ha creato il repository. Le autorizzazioni del file non sono corrette.


Per me ho dovuto cambiare il proprietario dei file nel repository che stavo cercando di inserire con git per l'utente corretto con chown. Penso che questo sia fondamentalmente quello che stavi dicendo, anche se non era ovvio per me quando l'ho letto.
Dee

Sono d'accordo con questo, controlla che il proprietario e il gruppo siano impostati per l'utente disposto a inserire il repository ".git" (succede se hai estratto un ramo come "root") un "sudo chown -R" ha fatto il lavoro nel mio caso.
jo_


2

Questo mi è successo su OSX dove utilizzo un file system senza distinzione tra maiuscole e minuscole. In qualche modo un altro sviluppatore ha spinto un ramo con lo stesso nome ma caso diverso: My-Branchvs my-branch.

Avevo già My-Branchverificato e ho ricevuto l'errore "impossibile aggiornare il riferimento locale" quando ho eseguito un pull, probabilmente perché il file system pensa My-Branch== my-branch.

Dato che usiamo Github, potrei risolvere il problema eliminando uno dei rami tramite la GUI di Github.


Nel mio caso, entrambi i rami in conflitto appartenevano a un altro utente, quindi non ho potuto eliminarne uno. Invece, ho eliminato il file di riferimento del ramo in .git \ refs \ remotes e questo lo ha risolto (temporaneamente - il problema si ripresenterà ogni volta che tiro fino a quando l'altro utente non elimina uno dei suoi rami).
Jana Mandic

Il mio problema era anche dovuto al fatto che la filiale locale e quella remota avevano una diversa capitalizzazione. L'eliminazione del ramo locale, utilizzando il comando prune sopra e quindi il check-out dall'origine lo ha risolto
descrivi il

1

Questo errore con (impossibile aggiornare il riferimento locale) può verificarsi anche se hai cambiato le password di recente e ci sono alcune cose fantasiose che integrano i tuoi accessi Windows e Linux.


1

Parlando da un utente di PC - Riavvia.

Onestamente, ha funzionato per me. Ho risolto due strani problemi di git che pensavo fossero corruzioni in questo modo.


1

Questa è probabilmente una situazione di nicchia, ma: eseguo Windows in una VM Parallels sul mio MacBook Pro, con i miei repository locali memorizzati sul disco della VM, che è condiviso con macOS.

Se ho un file aperto in un'app Mac da un repository che si trova sulla VM Windows, a volte ricevo l'errore "impossibile aggiornare il riferimento locale". La soluzione quando ciò accade è semplicemente chiudere il file o uscire dall'app Mac.


1

Cos'è successo qui? I riferimenti locali ai tuoi rami remoti sono stati modificati e quindi quando esegui git pull, git non trova nessun ramo remoto corrispondente e quindi fallisce.

git remote prune origin

effettivamente pulisce questi riferimenti locali e quindi esegue di git pullnuovo.

Suggerimento: esegui con l' --dry-runopzione per la sicurezza


0

Ho avuto lo stesso problema sul mio server Debian poiché il disco è pieno. Non è stato possibile creare alcun file temporaneo poiché non è rimasto spazio sul dispositivo. Dopo aver pulito alcuni file, ha funzionato bene.


0

Questo lavoro per me

rm .git/logs/refs/remotes/origin/master 

Dubito che questo aiuti - o addirittura funzioni affatto. Per convincermi del contrario, aggiungi una spiegazione di come dovrebbe funzionare e perché dovrebbe aiutare con il problema. Evidenziare le differenze con altre risposte esistenti apparentemente simili sarebbe un vantaggio. Soprattutto quello votato da Babak.
Yunnosch

0

Ho avuto lo stesso errore, stavo aggiornando da Eclipse e ho ricevuto molti errori. Quindi ho provato ad aggiornare da una finestra di comando DOS e ho riscontrato lo stesso problema.

Poi ho provato la soluzione "git gc --prune = now" Questo ha dato messaggi che i file erano bloccati nella directory refs.

Eclipse deve aver bloccato qualcosa nella directory "refs".
La soluzione che ho trovato è stata semplicemente chiudere Eclipse. Poi ho aggiornato il repository da DOS con un comando "git PULL" e tutto ha funzionato bene.


0

Rimuovi il file .git / logs / refs / remotes / origin / [Locked Branch Name]


1
Dubito che questo aiuti - o addirittura funzioni affatto. Per convincermi del contrario, aggiungi una spiegazione di come dovrebbe funzionare e perché dovrebbe aiutare con il problema. Evidenziare le differenze con altre risposte esistenti apparentemente simili sarebbe un vantaggio. Soprattutto quello votato da Babak.
Yunnosch
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.