git push dice "tutto aggiornato" anche se ho delle modifiche locali


238

Ho un server di gitosi remoto e un repository git locale e ogni volta che apporto una grande modifica al mio codice, invierò anche le modifiche a quel server.

Ma oggi trovo che, anche se ho alcune modifiche locali e mi impegno nel repository locale, quando git push origin masterlo eseguo dice "Tutto aggiornato", ma quando uso git cloneper verificare i file sul server remoto, non contiene le ultime modifiche . E ho solo un ramo chiamato "master" e un server remoto chiamato "origin".

PS: Questo è ciò che git mostra quando è in esecuzione ls-remote, non sono sicuro che possa aiutare

$ git ls-remote origin
df80d0c64b8e2c160d3d9b106b30aee9540b6ece        HEAD
df80d0c64b8e2c160d3d9b106b30aee9540b6ece        refs/heads/master
$ git ls-remote .
49c2cb46b9e798247898afdb079e76e40c9f77ea        HEAD
df80d0c64b8e2c160d3d9b106b30aee9540b6ece        refs/heads/master
df80d0c64b8e2c160d3d9b106b30aee9540b6ece        refs/remotes/origin/master
3a04c3ea9b81252b0626b760f0a7766b81652c0c        refs/tags/stage3


Vale la pena ricontrollare che sei nella directory giusta! Esp. quando hai i sottomoduli puoi confondere le risposte git dal genitore ..
geotheory

Nel mio caso stavo ricevendo un errore mentre commitnon me ne sono accorto e ho provato a spingere il codice
Zohab Ali

3
dimenticato di impegnarti?
ldgorman,

Risposte:


256

Stai lavorando con una testa distaccata per caso?

Come in:

testa staccata

indicando che l'ultimo commit non è una diramazione.

Avvertenza : quanto segue git reset --hard: assicurarsi di utilizzare git stashprima se si desidera salvare i file attualmente modificati.

$ git log -1
# note the SHA-1 of latest commit
$ git checkout master
# reset your branch head to your previously detached commit
$ git reset --hard <commit-id>

Come menzionato nella git checkoutpagina man (enfasi sulla mia):

A volte è utile essere in grado di effettuare il checkout di un commit che non si trova sulla punta di una delle filiali .
L'esempio più ovvio è verificare il commit in un punto di rilascio ufficiale con tag, come questo:

$ git checkout v2.6.18

Le versioni precedenti di git non lo consentivano e ti chiedevano di creare un ramo temporaneo usando l' -bopzione, ma a partire dalla versione 1.5.0, il comando sopra si stacca HEADdal ramo corrente e punta direttamente al commit chiamato dal tag ( v2.6.18nel esempio sopra).

Puoi usare tutti i comandi git mentre sei in questo stato.
È possibile utilizzare git reset --hard $othercommitper spostarsi ulteriormente, ad esempio.
È possibile apportare modifiche e creare un nuovo commit su HEAD distaccato .
Puoi persino creare un'unione usando git merge $othercommit.

Lo stato in cui ci si trova mentre HEAD è staccato non è registrato da alcun ramo (il che è naturale --- non ci si trova in nessun ramo).
Ciò significa che puoi scartare i tuoi commit e le tue fusioni temporanee tornando a una succursale esistente (ad es. git checkout master) E in un secondo momento git pruneo git gcvorrebbe raccoglierli.
Se lo hai fatto per errore, puoi chiedere al reflog di HEAD dove ti trovavi, ad es

$ git log -g -2 HEAD

4
Non mi è del tutto chiaro come sono arrivato a questo stato (facendo un po 'di confusione con git-svn al momento), ma questo è stato sufficiente per riportarmi nel posto giusto. Grazie.
Christopher Schmidt,

Sono in uno stato di testa distaccato, ho unito le mie modifiche, ho effettuato il commit delle mie modifiche e ora voglio inviarlo al Master e non posso - mi dice "tutto aggiornato". Ma sto seguendo le istruzioni fornite dal mio Gitlab: Step 1: git fetch origin git checkout -b "nodeAPI" "origin/nodeAPI" Step 2. Review the changes locally Step 3. Merge and fix conflicts git fetch origin git checkout "origin/master" git merge --no-ff "nodeAPI" Step 4. Push the result of the merge to GitLab git push origin "master" sto bene fino all'ultimo passaggio. Ma ora sono solo confuso su come andare avanti.
John,

@John Devi essere in una filiale per spingere. Finché sei in una modalità HEAD staccata, ciò non funzionerebbe. Ripristina il tuo ramo dove sei git branch -f myBranch HEAD:, quindi controlla detto ramo e spingilo. Nel tuo caso, myBranchpotrebbe essere masterse eri in procinto di unire nodeAPI.
VonC

Attenzione a perdere tutte le modifiche locali dopo aver eseguito questo comando !! Valuta di fare un po 'di git stash e il backup del codice prima di fare qualcosa del genere.
kta,

@kta Un buon punto: ho modificato la risposta per rendere visibile quell'avvertimento.
VonC

152

Err .. Se sei un git noob sei sicuro di averlo fatto git commitprima git push? Ho fatto questo errore la prima volta!


10
Era git commit -a -m "your message goes here"nel mio caso
escluso

ADORO (sarcasmo) ogni volta che voglio aggiungere un nuovo progetto a un github a volte mi dimentico e il messaggio di errore mi porta a pensare di aver fatto qualcosa di veramente sbagliato - quindi ovviamente DUH! commit Mi succede solo quando ho creato nuovi repository di backup e ho dimenticato
Tom Stickel

git noob qui - dimentico di impegnarmi ogni volta prima di premere - la spinta dovrebbe impegnarsi automaticamente se non l'hai mai fatto prima
FoxMcCloud

2
@FoxMcCloud commettere è un passo importante per essere consapevoli di, io sono sicuro che imparare ad amare se non l'hai già :) ~ git add -A, git diff --staged, scorre attraverso i cambiamenti hmm guardando molto buono, git commit -m 'bam!',git push
AFOC

58

Forse stai spingendo una nuova filiale locale?

Una nuova filiale locale deve essere spinta esplicitamente:

git push origin your-new-branch-name

Solo una di quelle cose su git ... Clonate un repository, fate un ramo, commettete alcune modifiche, spingete ... "Tutto è aggiornato". Capisco perché ciò accada, ma questo flusso di lavoro è estremamente ostile ai nuovi arrivati.


3
Grazie! Questo risolto il mio problema "tutto aggiornato" con una nuova filiale che avevo
Pangu,

Cosa diavolo si intende per "tuo-nuovo-ramo-nome"? Ps: hai davvero ragione sui nuovi arrivati.
www-0av-Com,

@ user1863152 questo è il nome del nuovo ramo locale che hai creato. Sembra che tu non l'abbia fatto, quindi controlla altre risposte qui.
Roman Starkov,

Totalmente d'accordo con "questo flusso di lavoro è estremamente ostile ai nuovi arrivati". Sto lottando con questo da 1 ora. Ho installato un repository remoto e locale. Apportate modifiche al file REAME locale e provate a inviarlo a remoto e nulla cambia in remoto.
Vir


28

Un'altra situazione di cui è importante tenere conto: il tipo di stato predefinito per git è che si sta lavorando nel ramo "master". E per molte situazioni, ti ritroverai come il tuo principale ramo di lavoro (anche se alcune persone si divertono e fanno altre cose).

Comunque, è solo un ramo. Quindi una situazione in cui potrei entrare è:

Il mio ramo attivo NON è in realtà il ramo principale. ... Ma di solito eseguo il comando: git push(e l'avevo già fatto in precedenza git push origin master, quindi è una scorciatoia per QUELLO).

Quindi sto spingendo abitualmente il ramo master nel repository condiviso ... che probabilmente è una buona cosa pulita, nel mio caso ...

Ma ho dimenticato che i cambiamenti a cui ho lavorato non sono ancora nel ramo principale !!!

Quindi ogni volta che provo git pushe vedo "Tutto aggiornato", voglio urlare, ma ovviamente non è colpa di Git! È mio.

Quindi, invece, unisco il mio ramo in master, quindi spingo e tutto è di nuovo felice.


Anch'io volevo urlare, ma poi hai predicato la via della salvezza, per fondere la sposa in maestro, e poi git push.
Aaron C,

16
$ git push origin local_branch:remote_branch

Spiegazione

Ho avuto lo stesso errore e ho passato ore a cercare di capirlo. Alla fine l'ho trovato. Quello che non sapevo è che spingendo in questo git push origin branch-xmodo proverai a cercare branch-x localmente, quindi a push su branch-x remoto.

Nel mio caso, avevo due URL remoti. Ho fatto un checkout da branch-x a branch-y quando ho provato a passare da y localmente a x remote Ho ricevuto il messaggio tutto aggiornato, il che è normale perché stavo spingendo a x del secondo telecomando.

Per farla breve, per non cadere in questo tipo di trappola è necessario specificare il riferimento sorgente e il riferimento bersaglio:

$ git push origin local_branch:remote_branch

Aggiornare:

Se devi eseguire questo comando ogni volta che invii il tuo ramo, potresti aver bisogno di impostare l'upstream tra il tuo ramo locale e remoto con il seguente:

$ git push --set-upstream origin local_branch:remote_branch

O

$ git push -u origin local_branch:remote_branch

'git push upstream dev: master' Questo significa che spingerà la sorgente da dev a master. Destra?
Dhaduk Mitesh,

Questo mi ha aiutato, ho avuto un altro ramo locale chiamato come ramo remoto, ciò che ha causato confusione.
Hubert Kubiak,

Ok, questo sicuramente funziona per me, ma devo farlo ogni volta che voglio spingere qualcosa sul telecomando. Come lo risolvo una volta per tutte?
Samurai Jack,

potresti aver bisogno di impostare l'upstream tra il tuo ramo locale e remoto con il seguente: $ git push --set-upstream origin local_branch: remote_branch
Melchia

6

Vedi la risposta di VonC sopra: avevo bisogno di un passaggio in più:

$ git log -1
- note the SHA-1 of latest commit
$ git checkout master
- reset your branch head to your previously detached commit
$ git reset --hard <commit-id>

L'ho fatto, ma quando ho provato a git push remoterepo masterfarlo, ha detto "errore: impossibile inviare alcuni riferimenti. Per impedirti di perdere la cronologia, gli aggiornamenti non avanzati sono stati rifiutati, prima di unire le modifiche remote (ad esempio" git pull ") spingendo di nuovo ".

Così ho fatto 'git pull remoterepo master', e ho trovato un conflitto. L'ho fatto di git reset --hard <commit-id>nuovo, ho copiato i file in conflitto in una cartella di backup, l'ho fatto di git pull remoterepo masternuovo , ho copiato i file in conflitto nel mio progetto git commit, quindi git push remoterepo master, e questa volta ha funzionato.

Git ha smesso di dire "tutto è aggiornato" e ha smesso di lamentarsi di "avanzamenti veloci".


3

Ho affrontato una situazione simile; quando ho apportato le modifiche e ci ho provato git push origin master, dicevo che tutto era aggiornato.

Ho dovuto git addcambiare il file e poi git push origin master. Ha iniziato a funzionare da allora in poi.


4
Non avresti dovuto git commitaggiungere quel file prima di spingere?
David Harkness,

3

Dal tuo stato di git, probabilmente hai una situazione diversa dalla mia.

Ma comunque, ecco cosa mi è successo .. Ho riscontrato il seguente errore:

fatal: The remote end hung up unexpectedly
Everything up-to-date

Il messaggio più informativo qui è che il telecomando ha riagganciato. Si è scoperto che è dovuto al superamento della dimensione del buffer post HTTP. La soluzione è aumentarla con

git config http.postBuffer 524288000


3

Ho avuto questo problema oggi e non ha avuto nulla a che fare con nessuna delle altre risposte. Ecco cosa ho fatto e come l'ho risolto:

Un mio repository è stato spostato di recente, ma avevo una copia locale. Mi sono ramificato dal mio ramo "master" locale e ho apportato alcune modifiche - e poi mi sono ricordato che il repository si era spostato. Prima git remote set-url origin https://<my_new_repository_url>imponevo il nuovo URL, ma quando lo spingevo dicevo "Tutto aggiornato" invece di spingere il mio nuovo ramo al master.

Ho finito per risolverlo riformulandomi origin/mastere spingendo con nomi di rami espliciti, in questo modo:

$ git rebase <my_branch> origin/master
$ git push origin <my_branch>

Spero che questo aiuti chiunque abbia avuto il mio stesso problema!


3

Super rare - ma ancora: in Windows, potrebbe essere che i -arbitri confezionati ha un ramo con un caso lettera (cioè dev / mybranch), mentre arbitri cartella ha un altro caso (cioè Dev / mybranch) quando core.ignorecase è impostata su true .

La soluzione consiste nell'eliminare manualmente la riga pertinente dai pacchetti-refs . Non ho trovato una soluzione più pulita.


Questo è stato un problema anche per me. Termina con la ridenominazione delle cartelle con il caso errato all'interno della cartella .git (log / refs / head, refs / head).
Alexey Solonets,

2

Mi sono imbattuto in questo me stesso quando ho unito un ramo su Github e ho continuato a svilupparci localmente. La mia correzione era un po 'diversa dalle altre che sono state suggerite.

Prima ho ramificato un nuovo ramo locale dal mio vecchio ramo locale (che non potevo spingere). Quindi ho inviato il nuovo ramo locale al server di origine (Github). ie

$ git checkout -b newlocalbranch oldlocalbranch
$ git push origin newlocalbranch

Ciò ha portato i cambiamenti a presentarsi su Github, sebbene in newlocalbranch piuttosto che in oldlocalbranch.


2

Nel mio caso avevo 2 repository remoti.

git remote -v
originhttps https://asim_kt@...
originhttps https://asim_kt@...
origin  ssh:git@bitbucket.org:...
origin  ssh:git@bitbucket.org:...

Entrambi i pronti contro termine erano uguali. Solo uno era l' httpsaltro era ssh. Quindi, rimuovendo quello indesiderato, (nel mio caso, sshdato che l'ho usato httpsperché sshnon funzionava!) Risolto il problema per me.


2

Il mio errore è stato diverso da tutto ciò che è stato menzionato finora. Se non hai idea del perché avresti una testa staccata, probabilmente non lo fai. Stavo lavorando al pilota automatico con git commite git push, e non avevo letto l'output di git commit. Si è scoperto, è stato un messaggio di errore perché ho dimenticato -am.

[colin] ~/github/rentap.js [master] M % git commit 'figured out some more stuff with the forms in views and started figuring out row and mode in models so also made matching routes and controllers'
error: pathspec 'figured out some more stuff with the forms in views and started figuring out row and mode in models so also made matching routes and controllers' did not match any file(s) known to git.
[colin] ~/github/rentap.js [master] M % git push
Enter passphrase for key '/home/colin/.ssh/id_ecdsa': 
Everything up-to-date

Risolto il problema ponendo -amdove di solito faccio:

[colin] ~/github/rentap.js [master] M % git commit -am 'figured out some more stuff with the forms in views and started figuring out row and mode in models so also made matching routes and controllers'

2

Ho affrontato lo stesso problema. Poiché non ho aggiunto modifiche all'area di gestione temporanea. E ho provato direttamente a inviare il codice al repository remoto usando il comando:

git push origin master

E mostra il messaggio Everything up-to-date.

per risolvere questo problema, prova questi passaggi

  1. git add .
  2. git commit -m "Bug Fixed"
  3. git push -u origin master

1

Verifica di non aver ingannato il tuo URL remoto.

Volevo solo menzionare che mi sono imbattuto in questo dopo aver abilitato Git come CVS in una configurazione di build Jenkins locale. Sembra che Jenkins abbia verificato il commit più recente del ramo che gli ho dato e anche ripristinato il mio telecomando per corrispondere ai percorsi che ho dato al repository. Ho dovuto ricontrollare il mio ramo di funzionalità e correggere l'URL remoto di origine con 'git remote set-url'. Non puntare uno strumento di compilazione sulla tua directory di lavoro o avrai un brutto momento. Il mio telecomando era impostato su un percorso di file nella mia directory di lavoro, quindi ha riportato naturalmente tutto aggiornato quando ho tentato di inviare modifiche con la stessa origine e destinazione.


1

Un'altra possibilità è che hai nominato una directory nel tuo file .gitignore che è stata esclusa. Quindi i nuovi commit non verrebbero spinti. Mi è capitato di nominare una directory per ignorare la "ricerca", ma quella era anche una directory nel mio albero dei sorgenti.


1

C'è un modo rapido che ho trovato. Vai alla tua cartella .git, apri il HEADfile e cambia il ramo su cui ti trovavi. Ad esempio ref:refs/heads/master


In realtà impostarlo per refs/heads/masterrompere il mio repository. Ma impostandolo a quello che ho pensato di essere il capo commit dato il seguente messaggio: Warning: you are leaving 1 commit behind, not connected to any of your branches. Sono stato in grado di trasferire il commit in un nuovo ramo e di ricollegarlo al master.
schmijos,

1

Ho avuto lo stesso problema. Nel mio caso è stato causato dal dover nominare lo stesso telecomando. Ha creato la "origine" standard, ma ho usato "github" come telecomando per molto tempo, quindi anche quello era lì. Non appena ho rimosso il telecomando "origine", l'errore è scomparso.


1

Ho avuto questo successo (i miei commit nel mio log di git non erano su GitHub anche se git diceva che tutto era aggiornato) e sono sicuro che il problema fosse Github. Non ho ricevuto alcun messaggio di errore in Git, ma GitHub presentava errori di stato e il mio commit era lì diverse ore dopo.

https://status.github.com/messages

I messaggi di stato di GitHub erano:

  • Stiamo esaminando segnalazioni di indisponibilità del servizio.
  • Stiamo esaminando i problemi di accesso a GitHub.com.
  • Stiamo fallendo un sistema di archiviazione dati per ripristinare l'accesso a GitHub.com.

1

Un altro mio errore molto semplice ma noobish: ho semplicemente dimenticato di aggiungere un -mmodificatore di messaggio nel mio commit. Quindi ho scritto:

git commit 'My message'

Invece di corretto:

git commit -m 'My message'

NOTA: NON genera errori! Ma non sarai in grado di spingere i tuoi impegni e ottenere sempre Everything up to dateinvece


0

qui, la mia soluzione è diversa da quella sopra. non ho capito come si presenta questo problema, ma l'ho risolto. un po 'inaspettatamente.

ora arriva il modo:

$ git push origin  use_local_cache_v1
Everything up-to-date
$ git status
On branch test
Your branch is ahead of 'origin/use_local_cache_v1' by 4 commits.
  (use "git push" to publish your local commits)
  ......
$ git push
fatal: The upstream branch of your current branch does not match
the name of your current branch.  To push to the upstream branch
on the remote, use

    git push origin HEAD:use_local_cache_v1

To push to the branch of the same name on the remote, use

    git push origin test
    
$ git push origin HEAD:use_local_cache_v1    
Total 0 (delta 0), reused 0 (delta 0)
remote:

il comando che funziona per me è

$git push origin HEAD:use_local_cache

(Spero che voi ragazzi uscite da questo problema il prima possibile)


0

So che è super vecchio, ma nel mio caso l'ho risolto abbastanza rapidamente.

Stavo ottenendo lo stesso errore pur essendo un commit in anticipo master. Poi ho trovato l'attuale post Stack Overflow. Tuttavia, prima di procedere con le idee suggerite, ho appena deciso di fare un nuovo impegno e riprovare con la spinta all'origine e ha funzionato senza problemi.

Non so perché, ma forse è utile per qualcun altro.


In realtà non fornisce una risposta alla domanda. Una volta guadagnata una reputazione sufficiente , otterrai i privilegi per votare le risposte che ti piacciono. In questo modo i futuri visitatori della domanda vedranno un voto più elevato contare su quella risposta e anche il rispondente sarà premiato con punti reputazione. Vedi Perché il voto è importante .
Waqar UlHaq,

1
Ok, grazie per il chiarimento. Ma perché non può essere considerato (se vuoi) come una "soluzione alternativa" al problema? Non è la soluzione però, ma può essere comunque utile per gli altri.
Cisco

0

Un'altra possibilità è che hai dei commit che non influenzano la directory che stai spingendo. Quindi nel mio caso avevo una struttura simile

- .git
- README.md
- client/
 - package.json
 - example.js
- api/
 - requirements.txt
 - example.py

E mi sono impegnato a padroneggiare la modifica README.md, quindi git subtree push --prefix client heroku-client masterho eseguito e ricevuto il messaggioEverything up-to-date


0

Stavo lavorando con Jupyter-Notebook quando ho riscontrato questo errore ingannevole.

Non sono stato in grado di risolvere le soluzioni fornite in precedenza poiché non avevo una testa distaccata né avevo nomi diversi per il mio repository locale e remoto .

Ma quello che avevo era che le mie dimensioni dei file erano leggermente superiori a 1 MB e la più grande era quasi ~ 2 MB . Ho ridotto la dimensione del file usando Come posso ridurre la dimensione del file del mio notebook iPython?tecnica. Mi ha aiutato a ridurre le dimensioni del mio file cancellando gli output. Sono stato in grado di spingere il codice, d'ora in poi perché ha portato la mia dimensione del file in KB.

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.