Git push non farà nulla (tutto aggiornato)


100

Sto cercando di aggiornare un repository Git su GitHub. Ho apportato un sacco di modifiche, le ho aggiunte, mi sono impegnato e poi ho tentato di fare un file git push. La risposta mi dice che è tutto aggiornato, ma chiaramente non lo è.

git remote show origin

risponde con il repository che mi aspetto.

Perché Git mi dice che il repository è aggiornato quando ci sono commit locali che non sono visibili nel repository?

  [searchgraph]  git status
# On branch develop
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       Capfile
#       config/deploy.rb
nothing added to commit but untracked files present (use "git add" to track)

  [searchgraph]  git add .

  [searchgraph]  git status
# On branch develop
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   Capfile
#       new file:   config/deploy.rb
#

  [searchgraph]  git commit -m "Added Capistrano deployment"
[develop 12e8af7] Added Capistrano deployment
 2 files changed, 26 insertions(+), 0 deletions(-)
 create mode 100644 Capfile
 create mode 100644 config/deploy.rb

  [searchgraph]  git push
Everything up-to-date

  [searchgraph]  git status
# On branch develop
nothing to commit (working directory clean)

Risposte:


142

git pushnon spinge tutti i tuoi rami locali: come potrebbe sapere a quali rami remoti inviarli? Esegue il push solo dei rami locali che sono stati configurati per il push a un particolare ramo remoto.

Sulla mia versione di Git (1.6.5.3), quando lo eseguo git remote show originstampa effettivamente quali rami sono configurati per il push:

Local refs configured for 'git push':
  master pushes to master (up to date)
  quux   pushes to quux   (fast forwardable)

D. Ma potrei spingere fino in fondo mastersenza preoccuparmi di tutto questo!

Quando tu git clone, per impostazione predefinita, configura il tuo masterramo locale per il push al masterramo del remoto (indicato localmente come origin/master), quindi se effettui solo il commit master, un semplice git pushrespingerà sempre le tue modifiche.

Tuttavia, dallo snippet di output che hai pubblicato, sei su un ramo chiamato develop, che immagino non sia stato impostato per inviare a nulla. Quindi git pushsenza argomenti non spingere i commit su quel ramo.

Quando dice "Tutto aggiornato", significa "tutti i rami che mi hai detto come spingere sono aggiornati".

D. Quindi come posso spingere i miei commit?

Se quello che vuoi fare è inserire le tue modifiche da developin origin/master, allora dovresti probabilmente unirle nel tuo locale e masterpoi spingerle:

git checkout master
git merge develop
git push             # will push 'master'

Se quello che vuoi è creare un developramo sul telecomando, separato da master, quindi fornire argomenti a git push:

git push origin develop

Ciò: creerà un nuovo ramo sul telecomando chiamato develop; e aggiorna quella filiale con la developfiliale locale ; e impostato developsu push in origin/developmodo che in futuro, git pushsenza argomenti , spinga developautomaticamente.

Se vuoi inviare il tuo locale developa un ramo remoto chiamato qualcosa di diverso da develop , puoi dire:

git push origin develop:something-else

Tuttavia, quel modulo non sarà impostato developper inviare sempre origin/something-elsein futuro; è un'operazione one-shot.


Grazie mille, il tuo git push origin si è sviluppato: qualcos'altro ha dato risposta a una domanda che non ero in grado di ottenere per un po '.
Antroid

1
Nel mio caso non git push origin xstavo ancora configurando il ramo x da spingere in futuro. Era dovuto a una specifica pushspec nella .gitconfig [remote "origin"]sezione che causava il comportamento di git.
Raman

27

Questo è successo a me quando la mia applicazione SourceTree si è bloccata durante lo staging. E sulla riga di comando, sembrava che il precedente git addfosse stato danneggiato. Se questo è il caso, prova:

git init
git add -A
git commit -m 'Fix bad repo'
git push

Nell'ultimo comando, potrebbe essere necessario impostare il ramo.

git push --all origin master

Tieni presente che questo è sufficiente se non hai eseguito alcuna ramificazione o qualsiasi altra cosa del genere. In tal caso, assicurati di spingere al ramo corretto come git push origin develop.


15

Provare:

git push --all origin

questo spinge i commit a separare i rami sul repo, non da un ramo al master.
Sreedevi J

13

Prova ad andare all'ultimo commit e poi fallo git push origin HEAD:master.


1
In realtà ha funzionato. Vorresti spiegare perché ha funzionato?
René Nyffenegger

Testualmente dai documenti:Push the current branch to the remote ref matching master in the origin repository. This form is convenient to push the current branch without thinking about its local name.
uruapanmexicansong

Ha funzionato anche per me
Jerad Rutnam

Ho confrontato il modo in cui è configurato il mio repository e tutti i rami hanno lo stesso aspetto. Eppure, in un ramo non ho potuto usare semplicemente git push: / Questo ha lavorato anche per me: git push origin HEAD:my_branch_name.
iaforek

6

Per il mio caso, nessuna delle altre soluzioni ha funzionato. Ho dovuto fare un backup dei nuovi file modificati (mostrati con git status) ed eseguire un file git reset --hard. Questo mi ha permesso di riallinearmi con il server remoto. Aggiunta di nuovi file modificati e esecuzione

git add .
git commit -am "my comment"
git push

Ha fatto il trucco. Spero che questo aiuti qualcuno, come soluzione "ultima possibilità".


4

In questo momento, sembra che ti trovi nel ramo di sviluppo. Hai un ramo di sviluppo sulla tua origine? In caso contrario, prova git push origin develop.git pushfunzionerà una volta che conosce un ramo di sviluppo sulla tua origine.

Come ulteriore lettura, darei un'occhiata alle pagine man di git-push , in particolare, alla sezione degli esempi.


3

Per essere precisi, se vuoi unire qualcosa da padroneggiare, puoi seguire i passaggi seguenti.

git add --all // If you want to stage all changes other options also available
git commit -m "Your commit message"
git push // By default when it clone is sets your origin to master or you would have set sometime with git push -u origin master.

È una pratica comune nel modello di richiesta pull creare in un nuovo ramo locale e quindi eseguire il push di tale ramo in remoto. Per questo è necessario indicare dove si desidera inviare le modifiche in remoto. Puoi farlo menzionando il telecomando al momento del push.

git push origin develop // It will create a remote branch with name "develop".

Se vuoi creare un ramo diverso dal nome del tuo ramo locale puoi farlo con il seguente comando.

git push origin develop:some-other-name

2

Grazie a Sam Stokes. Secondo la sua risposta puoi risolvere il problema in modo diverso (io ho usato in questo modo). Dopo aver aggiornato la directory di sviluppo, è necessario reinizializzarla

git init

Quindi puoi eseguire il commit e inviare gli aggiornamenti al master


1
Grazie! Nel mio caso, digita: git inite apri una nuova scheda dei comandi, digita:git push origin branch_name
s7ven

2

Questo è successo a me quando ero ^Cnel bel mezzo di un git pushto GitHub. Tuttavia, GitHub non ha mostrato che le modifiche erano state apportate.

Per risolverlo, ho apportato una modifica al mio albero di lavoro, ho eseguito il commit e quindi ho premuto di nuovo. Ha funzionato perfettamente bene.


2

Questo è successo a me. Ho appena reimpegnato le modifiche e poi ho spinto.


2

Ho provato molti metodi, inclusi quelli definiti qui. Quello che ho è

  • Assicurati che il nome del repository sia valido. Il modo migliore è copiare il collegamento dal sito del repository e incollarlo in git bash.

  • Assicurati di aver salvato i file selezionati.

    git commit -m "Your commit here"
    
  • Se entrambi i passaggi non funzionano, prova

    git push -u -f origin master


1

Invece, potresti provare quanto segue. Non devi andare amaster ; puoi forzare il push delle modifiche direttamente dal tuo ramo stesso.

Come spiegato sopra, quando esegui un rebase, modifichi la cronologia sul tuo ramo. Di conseguenza, se provi a fare un normale git pushdopo un rebase, Git lo rifiuterà perché non c'è un percorso diretto dal commit sul server al commit sul tuo ramo. Invece, dovrai usare il flag -fo --forceper dire a Git che sì, sai davvero cosa stai facendo. Quando si eseguono push forzati, si consiglia vivamente di impostare la push.defaultconfigurazione su semplice, che è l'impostazione predefinita in Git 2.0. Per assicurarti che la tua configurazione sia corretta, esegui:

$ git config --global push.default simple

Una volta corretto, puoi semplicemente eseguire:

$ git push -f

E controlla la tua richiesta di pull. Dovrebbe essere aggiornato!

Vai alla fine di Come ribasare una richiesta di pull per maggiori dettagli.


0

Assicurati anche di spingere verso il ramo corretto.


0

Questo è successo a me una volta che ho provato a spingere da un nuovo ramo e ho usato git push origin masterinvece. Dovresti:

  • Usa: git push origin your_new_branchse vuoi che questo ramo avvenga anche nel repository remoto.
  • Altrimenti, fai il check-out al tuo ramo principale, unisci le cose, quindi sposta dal master al repository git con git merge origin master.

Ricapitolando: il punto qui è che dovresti controllare dove offri il secondo parametro per git merge. Quindi, se sei nel master usa master come secondo parametro se sei nel new_branch usa questo come secondo parametro se vuoi mantenere questo ramo nel repository remoto altrimenti opta per la seconda opzione sopra.


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.