errore git pull: errore: il riferimento remoto è attivo ma previsto


227

Messaggio completo:

error: Ref refs/remotes/origin/user is at 3636498c2ea7735fdcedc9af5ab3c8689e6abe77 but expected a21359c6cc2097c85775cde6a40105f4bd7100ec
From github.com:{github project url}
 ! a21359c..6273ffc  user -> origin/user  (unable to update local ref)

3
Apparentemente qualcuno ha riscritto la storia del repository da git push --force. Prova a correre git pull --force.
xaizek,

1
Fornisce lo stesso errore con git push --force
Sanjeev Kumar Dangi il

5
La risposta a questa domanda ha risolto questo errore - stackoverflow.com/questions/3046436/…
Sanjeev Kumar Dangi

Risposte:


225

Se stai eseguendo git in un file system che non fa distinzione tra maiuscole e minuscole (Windows o OS X), ciò si verificherà se ci sono due rami con lo stesso nome ma con maiuscole diverse, ad es. user_model_changesE User_model_changespoiché entrambi i rami remoti corrisponderanno allo stesso riferimento di tracciamento .

Elimina il ramo remoto sbagliato (non dovresti avere rami che differiscono solo per caso) e quindi git remote prune origintutto dovrebbe funzionare


grazie per la risposta. Questo non era il problema con questo errore. Ho già trovato la soluzione a questo problema e ho pubblicato un commento sotto la domanda.
Sanjeev Kumar Dangi,

2
Aiuta anche per Mac OS X (il filesystem predefinito non fa distinzione tra maiuscole e minuscole).
Tammo Freese,

12
sì, il problema senza distinzione tra maiuscole e minuscole su Windows ha causato il problema. Ho risolto rimuovendo manualmente la .git\refs\remotes\origincartella ref in e poi di git pullnuovo.
Roy Ling,

e per coloro che non sanno dove sarà la cartella .git .. verrà creata nella cartella Progetto / area di lavoro: D
kumar

1
Questo è un bug git (almeno il messaggio di errore è sbagliato). Spero che qualcuno possa segnalare questo bug al progetto git. Mi sembra difficile segnalare un bug al progetto git. github.com/git/git
uomo di bronzo

190

Correzione permanente

git update-ref -d risolto il mio caso di questo errore, ad es

git update-ref -d refs/remotes/origin/user

Si noti che ciò non influisce sul telecomando.

Nel mio caso, un successivo ha git fetchrecuperato di nuovo quel ramo, e seguendo git recupera / tira non ha più dato l'errore "il riferimento remoto è a ma previsto".

Se non funziona, una soluzione temporanea:

Nota anche che se non ti interessa il ramo in questione (ad esempio vuoi solo aggiornare il master, non l'origine / l'utente), una git pullsoluzione alternativa è recuperare, quindi unisci il ramo particolare che ti interessa, ad es.

git fetch # may give an error for a particular branch, but other branches will still be successfully fetched
git merge origin/master

Questa dovrebbe essere la soluzione accettata perché risolve il problema senza toccare il telecomando.
Cerno,

52

Basta eliminare le cartelle e i file in \.git\refs\remotes\origin. Funziona quando non hai cambiamenti non compressi.


Questo potrebbe non funzionare se il tuo ref remoto è "impacchettato" e quindi non in ref / telecomandi / ** La soluzione di JDiMatteo dovrebbe funzionare comunque
Alexander Bird

2
Ha funzionato per me. Grazie mille!
Swapnil Patwa,

Ha funzionato come un fascino! Grazie!
Anurag S Sharma

43

Ho eseguito questo per risolvere il problema:

git gc --prune=now

2
Ciò ha risolto il problema per me.
Aamir Rizwan,

2
anche per me ..-- :)
Aravind R Pillai,

3
Grazie, questa soluzione è stata risolta per me. Potresti spiegare qualcosa in più sulla soluzione che hai fornito.
Aamol,

1
fondamentalmente è solo uno strumento Git Garbage Collector, quindi cancella tutto ciò che non è sincronizzato ma si trova sul computer locale per scopi di memorizzazione nella cache
elad silver

42

Utilizzare i due comandi seguenti uno per uno.

git gc --prune=now

git remote prune origin

Questo risolverà il tuo problema.


1
Questo funziona per me, ma quando faccio un altro git pull questo problema si ripresenta
Jojin

@Jojin Come te. E finalmente ho scelto il modo in cui Prakash Saravanan ha fornito
xi.lin il

1
Questo dovrebbe essere valutato più in alto rispetto al suggerimento di modificare i file git :)
Mike Wise,

solo questa soluzione ha funzionato per me. Grazie!
insaineyesay,

12

Ho dovuto rimuovere il mio ramo dalla mia riga di comando su:

.git\refs\remotes\{my remote}\{**my branch**}

e poi facendo manualmente:

git pull [remote_name] [branch_name]

Sono stato in grado di tirare le modifiche.

Nota: stavo usando SourceTree e non ero in grado di fare il pull.


Alla fine ho rinominato i miei telecomandi: avevo due telecomandi "Bitbucket / staging" e "bitbucket / staging" nella mia storia di SourceTree ma solo "Bitbucket" appariva sulla riga di comando quando facevo: git remote -v. Quindi ho rinominato Bitbucket in bitbucket e il conflitto è finalmente scomparso, spero che questo aiuti molto probabilmente gli utenti di SourceTree.
jogam5

Ho anche dovuto rimuovere il ramo .git\packed-refsprima che fosse riparato per me.
Michael,

6

Un hard reset risolverà anche il problema

git reset --hard origin/master

Hai selezionato una risposta migliore?
mruanova,

5

Passaggi più chiari

  1. nel terminale

    cd /.git/refs/remotes/origin
    
  2. ls, vedrai alcuni rami e HEAD

  3. Rimuovi il ramo che ritieni abbia il problema

    rm branchname
    
  4. Se non ha funzionato, eliminare tutti i rami / HEAD

    • potresti voler tirare

Spero che funzioni ora.


è essenzialmente lo stesso di git update-ref -d <branchname>?
jt000,

2

Prova questo, ha funzionato per me. Nel vostro terminale: git remote prune origin.


2

Sfortunatamente i comandi GIT come prugna e reset o push non hanno funzionato per me. Prune ha funzionato una volta e poi il problema è tornato.

La soluzione permanente che ha funzionato per me è modificare manualmente un file git. Basta andare nella cartella .git del progetto e quindi aprire il file pacchetto-refs in un editor di testo come Notepad ++. Quindi passare alla riga con il ramo in errore e aggiornare la sua guida a quella prevista.

Se hai un messaggio come:

"errore: impossibile bloccare ref 'refs / remotes / origin / feature / branch_xxx': è a 425ea23facf96f51f412441f41ad488fc098cf23 ma previsto 383de86fed394ff1a1aeefc4a522d886adcecd79"

quindi nel file trova la riga con 'refs / remotes / origin / feature / branch_xxx'. Il guid ci sarà quello atteso (2 °) - 383de86fed394ff1a1aeefc4a522d886adcecd79. Devi cambiarlo in quello reale (1 °) - 425ea23facf96f51f412441f41ad488fc098cf23.

Ripeti l'operazione per gli altri rami non funzionanti e sarai in grado di procedere. A volte, dopo il recupero, dovevo ripetere gli stessi rami che avevo già "riparato" in precedenza. Per recuperare nuovamente le guide agli aggiornamenti di GIT e fornirti l'ultima.

Ad ogni modo il problema non è un fermo spettacolo. L'elenco delle filiali viene aggiornato. Questo è piuttosto un avvertimento.


1

git for-each-ref --format = 'delete% (refname)' refs / original | git update-ref --stdin git reflog expire --expire = now --all git gc --prune = now


0

Lo stesso caso qui, ma nulla dei commenti pubblicati è giusto nel mio caso, ho solo un ramo (master) e utilizzo solo il file system Unix, questo errore si verifica in modo casuale quando eseguo git fetch --progress --prune origin e branch è avanti o "origine / master". Nessuno può impegnarsi, solo 1 utente può fare push.

NOTA: ho un sottomodulo nel repository acme e acme ha nuove modifiche al sottomodulo (nuovi commit), devo prima fare un aggiornamento del sottomodulo con l'aggiornamento del sottomodulo git.

[2014-07-29 13:58:37] Payload POST received from Bitbucket
[2014-07-29 13:58:37] Exec: cd /var/www/html/acme
---------------------
[2014-07-29 13:58:37] Updating Git code for all branches
[2014-07-29 13:58:37] Exec: /usr/bin/git checkout --force master
[2014-07-29 13:58:37] Your branch is ahead of 'origin/master' by 1 commit.
[2014-07-29 13:58:37]   (use "git push" to publish your local commits)
[2014-07-29 13:58:37] Command returned some errors:
[2014-07-29 13:58:37] Already on 'master'
---------------------
[2014-07-29 13:58:37] Exec: /usr/bin/git fetch --progress --prune origin
[2014-07-29 13:58:39] Command returned some errors:
[2014-07-29 13:58:39] error: Ref refs/remotes/origin/master is at 8213a9906828322a3428f921381bd87f42ec7e2f but expected c8f9c00551dcd0b9386cd9123607843179981c91
[2014-07-29 13:58:39] From bitbucket.org:acme/acme
[2014-07-29 13:58:39]  ! c8f9c00..8213a99  master     -> origin/master  (unable to update local ref)
---------------------
[2014-07-29 13:58:39] Unable to fetch Git data

Per risolvere questo problema (nel mio caso) esegui semplicemente git push se il tuo ramo è in anticipo rispetto all'origine.


3
La tua risposta qui si riferisce solo al fatto che il tuo repository locale è in anticipo rispetto all'origine dopo un nuovo commit. Questo è lo stato naturale di un'operazione di commit git locale e non si riferisce alla domanda originale.
David

0

So che questo è vecchio, ma ho la mia soluzione. Perché sto usando l'albero dei sorgenti, questo errore si verifica perché qualcuno crea un nuovo ramo. L'albero dei sorgenti è confuso al riguardo. Dopo aver premuto il pulsante "Aggiorna" accanto alla casella combinata "diramazione remota per estrarre", sembra che sourcetree abbia aggiornato l'elenco delle diramazioni e ora posso estrarre correttamente.


0

Ho avuto lo stesso problema che è stato causato perché ho reimpostato su un commit precedente anche se ho già inviato al ramo remoto.

Ho risolto eliminando il mio ramo locale quindi controllando il ramo di origine git checkout origin/my_branche quindi eseguendogit checkout my_branch


-1

Dopo aver cercato costantemente, questa è la soluzione che ha funzionato per me, che implica disinserire / rimuovere l'Upstream

git branch --unset-upstream
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.