2010-02-17 11 views
12

Non riesco a capire come vedere esattamente cosa è stato modificato, nel repository remoto, da una "spinta". 'git log' mi mostra la serie di commit, ma quelli si sono verificati nel mio repository locale e sono stati spinti in momenti diversi; Vorrei sapere quali commit erano parte di ogni specifico "push"git: come vedere le modifiche dovute alla spinta?

risposta

14

In realtà, puoi pescare queste informazioni dal reflog. Non è la cronologia completa del repository remoto, ma piuttosto è la cronologia della tua copia del ramo del repository remoto. Quindi, non vedrai le modifiche apportate al repository remoto da altre persone. Non è carino, ma puoi probabilmente scrivere uno script per renderlo più semplice.

Ad esempio:

$ git reflog show origin/master 
ca4f119 refs/remotes/origin/[email protected]{0}: pull --rebase: fast-forward 
d303ece refs/remotes/origin/[email protected]{1}: pull --rebase: fast-forward 
ce28c26 refs/remotes/origin/[email protected]{2}: pull --rebase: fast-forward 
0f71883 refs/remotes/origin/[email protected]{3}: pull --rebase: fast-forward 
8c2f0dd refs/remotes/origin/[email protected]{4}: pull --rebase: fast forward 
2958d6c refs/remotes/origin/[email protected]{5}: update by push 
6e9558c refs/remotes/origin/[email protected]{6}: pull --rebase: fast-forward 
8854b35 refs/remotes/origin/[email protected]{7}: pull --rebase: fast-forward 
b96f25d refs/remotes/origin/[email protected]{8}: pull --rebase: fast-forward 
efb0ab8 refs/remotes/origin/[email protected]{9}: pull --rebase: fast-forward 
71c12ca refs/remotes/origin/[email protected]{10}: pull --rebase: fast-forward 
d860e59 refs/remotes/origin/[email protected]{11}: update by push 
6342dbb refs/remotes/origin/[email protected]{12}: fetch: fast-forward 
... 

Si può vedere qui che la mia più recente spinta avanzata origin/master da 6e9558c a 2958d6c. Per vedere i commit puoi usare git log 6e9558c..2958d6c. Per esempio,

$ git log --abbrev-commit --pretty=oneline 6e9558c..2958d6c 
2958d6c Commit Summary 4 
5cbe548 Commit Summary 3 
13d007c Commit Summary 2 
4f19ac3 Commit Summary 1 

Se si ha accesso terminale al repository remoto, si potrebbe fare qualcosa di simile su quel fine per vedere tutte le spinte che ha ricevuto.

+2

È possibile ottenere il registro con data e ora? – user

+0

'git reflog --date = iso' credits: https://stackoverflow.com/a/17369548/2234009 –

3

Git non tiene traccia di quali commit erano parte di quale operazione "push"; o il repository contiene una certa sequenza di commit, oppure no. Non importa a Git come sono arrivati ​​i commit, se un gruppo di tre commit era parte di una spinta, o ognuno di essi è stato fatto in una spinta separata.

+1

In realtà non è vero: il reflog si ricorderà di tutte le modifiche apportate a ciascun ramo. Una spinta di più commit apparirà come un singolo cambiamento nel reflog. Vedi la mia risposta qui sotto. –

+0

È vero, ma il reflog non è in realtà parte del repository. In particolare, non è possibile visualizzare un reflog remoto senza accesso al repository diretto (ad esempio, non è possibile visualizzare un reflog per un repository su Github). –

+0

Vero ma Github espone qualcosa di simile tramite la loro API: https://objectpartners.com/2014/02/11/recovering-a-commit-from-githubs-reflog/ –

Problemi correlati