2009-08-25 14 views
139

Eventuali duplicati:
Using Git how do I find modified files between local and remoteCome posso vedere i commit in arrivo in git?

Come posso impegna in arrivo in Git? O ancora meglio, vedi cosa ho appena git fetch/git pull ed?

Modifica: Per chiarire la domanda: qualcuno mi dice che, per ottenere alcune correzioni, dovrei estrarre dal loro repository. Il mio obiettivo è vedere quali sono i loro cambiamenti prima di li accetto. git pull si unisce automaticamente, che non è quello che voglio. git fetch li prenderò senza fondersi, ma non sono sicuro di vedere cosa ho appena inserito. Il motivo per il fraseggio originale è che normalmente uso Mercurial, dove il comando sarebbe hg incoming <repo name here> — un comando per il quale sembra mancare git un analogo.

risposta

149

incoming isn È piuttosto una mappatura diretta in git perché è possibile (e spesso faccio) avere più repository da cui si sta provando, e ogni repository ha più filiali.

Se ci fosse un equivalente di comando in entrata di hg, probabilmente sarebbe questo:

git fetch && git log ..origin/master 

Cioè, "andare afferrare tutte le cose dal monte, e quindi confrontare il mio ramo in corso contro la ramo principale a monte. "

Allo stesso modo, in uscita sarebbe questo:

git fetch && git log origin/master.. 

In pratica, ho solo digitare coloro manualmente (anche se ho creato un alias per uno di loro), perché è facile avere un sacco di sedi locali di monitoraggio e di essere monitorato da molti rami remoti e non ha problemi a tenerlo insieme.

+6

Inoltre potresti voler usare 'git diff --stat origine/master' per vedere il diffstat che' git pull' mostra dopo una fusione riuscita. –

+1

Grazie per questa risposta @Dustin! Potrei chiedere, non capisco perfettamente la magia alla base di 'log ..origin/master' cosa significano i punti? – gideon

+0

Non è tanto magico, è mostrato nella sinossi per 'git log' e descritto come seconda opzione nella sezione opzioni di [la pagina man] (http://schacon.github.com/git/git-log. html) che poi conduce al documento [gitrevisions] (http://schacon.github.com/git/gitrevisions.html) che va molto più in dettaglio. – Dustin

1

Non esiste un commit di "commit in entrata" a livello locale e viene eseguito il push. Vorrei aprire gitx o gitk (che viene fornito con git) e controllare come sono i repository ... Penso che ti fornirà una visione chiara.

utilizzare: gitk --all per vedere.

+0

Si prega di vedere la mia domanda chiarita. –

+0

Ah, capisco cosa intendi ora, la risposta di Dustin è morta. grazie per maggiori dettagli –

10

È possibile esaminare la differenza tra due repository. Assunta si dispone di una filiale locale 'master' e una filiale remota-tracking 'origin/master', dove altre persone commettono il loro codice, è possibile ottenere diverse statistiche sulle differenze dei due rami:

git diff --summary master origin/master 

git diff --stat master origin/master 

git diff --numstat master origin/master 

git diff --dirstat master origin/master 

git diff --shortstat master origin/master 

git diff --name-only master origin/master 

git diff master origin/master 
+1

non si tratta di visualizzare il diff, ma di visualizzare i commit e tirare che l'utente ha fatto. –

+1

Vero, ma mi sento come se Netzpirat fosse vicino; se questo mi mostrava i log invece dei diffs, sarebbe perfetto. –

80

Potresti anche essere interessato a git whatchanged che offre una buona panoramica delle modifiche apportate in alcuni intervalli di commit.

Se si desidera rivedere quello che si sta per tirare, fare una prima, che aggiorna solo rami di monitoraggio locali per il repository remoto (e non uno qualsiasi dei vostri sportelli), e quindi utilizzare qualsiasi comando git fetch che mostra tu i nuovi commit che stai per tirare.Per esempio:

git whatchanged ..origin 

Questa è una scorciatoia per mostrare i commit tra "l'antenato comune di ovunque io sono ora e l'origine" attraverso "origine".

+0

ahh, mi piace meglio di usare git log –

6

Quando qualcuno ti dice di estrarre, ti forniranno l'URL repo e un ramo (il valore predefinito è master).

avevo appena faccio

git fetch URL branch 

seguito da uno (in ordine decrescente di preferenza):

# note 3 dots in next 3 commands 
gitk HEAD...FETCH_HEAD 
    # shows all commits on both sides since the "fork" point 
gitk --cherry-pick HEAD...FETCH_HEAD 
    # as above but skips identical patches so you really see the differences 
git log --graph --boundary --left-right --cherry-pick --decorate HEAD...FETCH_HEAD 
    # I have a nice alias for this; it's the text mode eqvt of the above 

Io uso anche "tig" a volte, ma questo caso d'uso specifico (vedere sia lati) non è ben servito da tig.

Tuttavia, se si mettono giù a due punti (che può corrispondere alla tua domanda effettiva più da vicino, anche se io continuo a preferire le versioni 3 punti), si può fare

tig HEAD..FETCH_HEAD 

ecco i alias per comodità:

incoming = !sh -c 'git fetch && git log --graph --boundary --left-right --cherry-pick --decorate HEAD..FETCH_HEAD' 
outgoing = !sh -c 'git fetch && git log --graph --boundary --left-right --cherry-pick --decorate FETCH_HEAD..HEAD' 
Problemi correlati