2009-05-11 11 views
21

Io lavoro al 100% con un ramo che ho fatto fuori dal ramo principale. Ora che un collega è tornato all'origine/master, ho provato a spingere quei cambiamenti nel mio ramo personale. Quando faccio un 'master git checkout' seguita da un 'git status' ottengo il seguente:Git: come è un ramo che non sto eseguendo prima dell'origine/master

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

Come è un ramo che non ho mai impegnano a in vantaggio di 2 commit? Qual è il modo migliore per scoprire che cosa commettono e essenzialmente annullarli? Non desidero inviare nulla all'origine/master in quanto ciò potrebbe causare conflitti sconosciuti.

+0

Poiché Git è uno strumento così semplice, questa è la parte più confusa a riguardo. Ho esattamente lo stesso problema di te.Non mi sono mai impegnato nel mio ramo principale. Mi dirigo sempre e apporto le mie modifiche. Quando faccio un 'git pull origin master', ottengo che dietro ci sono 200 commit. Perché? Non l'ho mai toccato Vorrei che chiarissero questo. – Jeff

risposta

35

Per vedere i commit che hai nella testa che non sono di origine/master:

git log origin/master.. 

Per soffiare via e fatevi HEAD lo stesso di origin/master:

git reset --hard origin/master 

Come hai inserito le modifiche nel tuo repository? Ho notato che hai citato "push" ... L'origine è un repo centrale? Il repository del tuo collega? Ho il sospetto che ciò che volevi effettivamente fare fosse inserire i cambiamenti del tuo collega, direttamente o da un punto di sosta centrale, piuttosto che spingere. Potrebbe essere semplicemente che le 2 modifiche che hai davanti all'origine/master sono in realtà le modifiche del tuo collega, ma il ramo di tracciamento dell'origine/master è obsoleto.

+0

Grazie araqnid. Solo curioso, cosa fa git log origin/master .. fare in questo caso? –

+3

Con i comandi git che effettuano un * intervallo * di revisioni, A..B è abbreviazione di "B^A" o "B - non A". "A .." è di per sé abbreviazione di "HEAD --not A". git carica la revisione B, quindi torna indietro nel grafico di revisione, fermandosi quando incontra commit raggiungibili da A (spesso A stesso). Nel caso di una semplice cronologia delle revisioni in cui il grafico è solo una linea, questo semplifica la visualizzazione dei commit dopo A fino a e includendo B. – araqnid

+0

+1 Grazie. <3 –

0

Avete già fatto git rebase sul ramo che voi state lavorando su?

In caso contrario, provare a copiare la filiale (git checkout -b testrebase) e emettere un numero git rebase master per vedere se funziona. Questo risolverà tutti i commit che hai fatto rispetto al master e poi cercherò di applicarli indietro (la storia ha senso, in pratica). Se non funziona, cancella testrebase.

4

Stai lavorando su un ramo del master e hai effettuato due commit che non sono in origin/master.

Il messaggio # Your branch is ahead of 'origin/master' by 2 commits. sta dicendo:

# Your branch 'mybranch' has two commits not in 'origin/master' 

Imagining utenti git numeri di revisione SVN-come, sei ramo si è impegna 1, 2, 3, 4, 5 - ma origin/master ha solo 1, 2, 3. Così la storia di revisione sembra qualcosa di simile al seguente diagramma ASCII scadente ..

your branch         -- [commit 4]--[commit 5] 
              /     /\ HEAD 
master --[commit 1]--[commit 2]--[commit 3]-/ 
             /\ origin/master 

Per visualizzare gli ultimi due commit nel log, si può fare ..

git log HEAD..HEAD~2 
0

Potrebbe essere necessario assicurarsi che la propria origine/master sia aggiornata con la versione repo del master. Prova a correre:

git fetch origin master 

in modo che l'origine/master locale sia uguale al master del repository. Quindi quando esegui

git pull origin master 

dovresti ottenere una visualizzazione accurata di quanti comandi precedono il tuo master locale. Dopo di che è possibile eseguire araqnid's command per vedere quali commit effettivamente sono diversi.

Problemi correlati