La tua filiale è davanti a "origine / master" di 3 commit


354

Ricevo quanto segue quando corro git status

Your branch is ahead of 'origin/master' by 3 commits.

Ho letto su qualche altro post il modo per risolvere questo problema, git pull --rebasema cos'è esattamente rebase, perderò i dati o è un modo semplice per sincronizzarmi con il master?


19
Non penso che questo sia un duplicato ... Questa domanda sta ponendo cosa significa, mentre l'altra domanda sta chiedendo come scartare le modifiche.
onionjake,

11
Come è stato contrassegnato come duplicato da così tante persone? La domanda indica ovviamente che la persona non vuole perdere i propri cambiamenti. Hanno apportato modifiche e sono confusi dal messaggio. La cosiddetta domanda duplicata farebbe perdere le modifiche alla persona.
Derek Greer,

4
Devo dire che la domanda collegata sopra non è in realtà un duplicato di questa domanda ...
Dave Kanter

15
@DerekGreer: come è stato contrassegnato come duplicato? Perché la maggior parte delle persone che contrassegnano le domande come duplicati non si preoccupano di leggere e comprendere effettivamente la domanda. Se ci sono somiglianze superficiali, passeranno alla conclusione che i due sono identici e dipenderà dall'OP o da altri che sono disposti a prendersi il tempo di ripetere attentamente ciò che avrebbe dovuto essere ovvio in primo luogo, se il i cacciatori di truffe si erano effettivamente preoccupati di prestare attenzione.
iconoclasta,

6
^^^ la cui pratica sta uccidendo SO, IMO.
Geek Stocks

Risposte:


767

Ricevi questo messaggio perché hai apportato modifiche al tuo master locale e non le hai spinte sul telecomando. Esistono diversi modi per "risolverlo" e di solito dipende dall'aspetto del flusso di lavoro:

  • In un buon flusso di lavoro la tua copia remota di master dovrebbe essere quella buona mentre la tua copia locale di master è solo una copia di quella in remoto. Utilizzando questo flusso di lavoro non riceverai mai più questo messaggio.
  • Se lavori in un altro modo e dovresti spingere le tue modifiche locali, git push originsupponendo che l'origine sia il tuo telecomando
  • Se le modifiche locali sono errate, rimuovile o ripristina lo stato del tuo master locale sul telecomando git reset --hard origin/master

82
git reset --hard origin / master è esattamente quello che stavo cercando. Grazie.
FluxEngine,

4
@iberbeu hai risolto la mia giornata ... git reset --hard origin / master è quello che sto cercando. + 1ed
Ravi

75
Inoltre, prima git diff master origin/master(ad es. git diff local remote) Per vedere i cambiamenti che rimuoverai
Shanimal,

1
Ho local / master sul ramo / origine remoto quindi usando git push origin master:branchquale restituito Everything up-to-date, dopo di che il messaggio di essere in vantaggio da x commit è andato via.
fyrye,

2
L'ultimo mi ha procurato quello che mi serviva lì!
RyanG,

38

Non c'è niente da risolvere. Hai semplicemente effettuato 3 commit e non li hai ancora spostati nella filiale remota. Esistono diverse opzioni, a seconda di ciò che si desidera fare:

  • git push: sposta le tue modifiche sul telecomando (questo potrebbe essere rifiutato se ci sono già altre modifiche sul telecomando)
  • non fare nulla e continuare a scrivere codice, sincronizzare un altro giorno
  • git pull: ottieni le modifiche (se presenti) dal telecomando e uniscile nelle modifiche
  • git pull --rebase: come sopra, ma prova a ripetere i tuoi commit in cima alle modifiche remote

Sei in una situazione classica (anche se di solito non ti impegnerai molto sul master nella maggior parte dei flussi di lavoro). Ecco cosa farei normalmente: rivedere le mie modifiche. Magari fai un git rebase --interactivepo 'di cosmetici, lascia cadere quelli che fanno schifo, riordinali per renderli più logici. Ora spostali sul telecomando con git push. Se questo viene rifiutato perché la mia filiale locale non è aggiornata: git pull --rebaserifare il mio lavoro in cima alle modifiche più recenti e git pushancora.


Ho usato git pull --rebase, ma ora dice che sono avanti di un commit
FluxEngine,

Quindi ho apportato le modifiche, ho spinto per padroneggiare, e quindi il nostro team leader si è unito a padrone. Quindi le modifiche sono lì, devo solo sincronizzarmi con l'attuale master.
FluxEngine,

@MartyMcFly È difficile vedere cosa sta succedendo qui. Dici di aver già spinto? Quindi perché ti impegni ancora a non essere padrone? Cosa intendi con your team lead merged to master? Non hai detto che hai già spinto a padroneggiare? Cosa contiene il commit extra? Prova git diff origin/mastera vedere come la tua filiale locale differisce dal telecomando.
pm

1
grazie per l'aiuto, scusa se ho fatto un brutto lavoro spiegando la situazione. Ma quello che stavo cercando è git reset --hard origin / master. Ma la tua risposta è stata utile +1.
FluxEngine,

Mi sembra di essere bloccato tra una roccia e un luogo difficile, ho provato a commettere cambiamenti, poi Git ha detto: sei avanti 11 impegni. Non mi è permesso aggiornare il repository remoto, quindi non è possibile effettuare una spinta. "git pull" dice: già aggiornato. Quindi ho provato il tuo terzo suggerimento, ma poi git dice: impossibile tirare con rebase: hai delle modifiche non messe in scena. si prega di impegnarli o nasconderli. Duh, è così che sono arrivato qui in primo luogo :-(
Sander de Jong,

36

Usa questi 4 semplici comandi

Step 1 :git checkout <branch_name>

È ovvio entrare in quel ramo.

Passaggio 2 :git pull -s recursive -X theirs

Apporta le modifiche alle filiali remote e sostituiscile con quelle in caso di conflitto. Qui se lo fai git statusotterrai qualcosa del genere la tua filiale è in anticipo rispetto a "origine / master" di 3 commit.

Passaggio 3 :git reset --hard origin/<branch_name>

Step 4 :git fetch

Ripristina il tuo ramo.

Godere.


17

Ho riscontrato questo problema dopo aver unito una richiesta pull su Bitbucket.

Doveva fare

git fetch

e quello era.


2
Stavo lavorando con un repository da un pacchetto e sono stato in grado di eliminare il messaggio applicando "git fetch" a un pacchetto corrente. tnx!
Martin Meeser,

In un check-out di sola lettura il mio stato git ha mostrato che ero 2 commit in anticipo, il registro sembrava come dovrebbe - tutti i commit nell'origine. Ho fatto una git pull ed ero 5 commetti avanti..WTF ???? Ho solo bisogno di recuperare per aggiornare gli indici locali ... tutto bene :)
Chris Rutledge il

12

Di solito se devo verificare quali sono le commit che differiscono dal master che faccio:

git rebase -i origin/master

In questo modo posso vedere gli commit e decidere di lasciarlo cadere o scegliere ...


Questa umile risposta fin qui era ciò che dovevo fare. Non riuscivo a capire come scoprire la differenza e tutte le mie varie git diff ...magie non avrebbero funzionato. Quando l'ho fatto, mi ha dato noopcome unico commit, e quando l'ho accettato, ora il mio ramo è sincronizzato con origin / master. Quindi sembra che i commit differ da origine / master non fossero in effetti nulla.
philo vivero,

11

Questo messaggio da gitsignifica che hai effettuato tre commit nel tuo repository locale e non li hai pubblicati nel masterrepository. Il comando da eseguire per quello è git push {local branch name} {remote branch name}.

Il comando git pull(e git pull --rebase) sono per l'altra situazione quando sono presenti commit sul repository remoto che non si hanno nel repository locale. L' --rebaseopzione indica che gitsposta il commit locale da parte, si sincronizza con il repository remoto e quindi tenta di applicare i tre commit dal nuovo stato. In caso di conflitto potrebbe non riuscire, ma ti verrà richiesto di risolverli. Puoi anche interrompere la procedura rebasese non sai come risolvere i conflitti utilizzando git rebase --aborte tornerai allo stato prima di eseguire git pull --rebase.


7

Se il tuo git dice che sei impegnata in anticipo, allora solo prima,

git push origin

Per essere sicuro di aver spinto tutti i tuoi ultimi lavori in repo

Poi,

git reset --hard origin / master

Per ripristinare e abbinare il repository


4

Questo mi è successo una volta dopo aver unito una richiesta pull su Bitbucket.

Dovevo solo fare:

git fetch

Il mio problema è stato risolto Spero che questo possa essere d'aiuto!!!


0
$ git fetch

  - remote: Enumerating objects: 3, done.
  - remote: Counting objects: 100% (3/3), done.
  - remote: Compressing objects: 100% (3/3), done.
  - remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0


$ git pull 

   - Already up to date!
   - Merge made by the 'recursive' strategy.

finalmente:

$ git push origin
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.