2013-04-11 14 views
5

Sono sempre pormi una serie di domande su rami ho creato che ho ancora determinare come realizzare:git: modifiche al ramo da quando sono state create?

  1. Quali file did i cambiamento nel ramo?
  2. Quali sono le modifiche effettive (diff) apportate al ramo?
  3. Qual è il log di commit che ho fatto al ramo?

Ora penso se ho capito come ottenere gli hash di tutti i commit che sono stati commessi nel ramo ma non uniti in master usando git cherry master <branchname>. Con questo potrei fare hash di hash e capire tutto, ma se hai un sacco di commit questo potrebbe richiedere molto tempo. Si noti che non voglio comparare allo stato attuale del master. Penso che la chiave sia conoscere l'hash del master da cui hai creato il tuo ramo, ma non sono esattamente sicuro su come determinarlo.

+2

http://stackoverflow.com/questions/4649356/how-do -i-run-git-log-to-see-changes-only-per-a-a-a-ramo-specifico –

+0

@GabrielePetronella ringrazia th almeno alle risposte # 3 penso. – coding4fun

risposta

14

per trovare dove la vostra cassa corrente discostato dal ramo principale,

base=`git merge-base master HEAD` 
echo $base 

per scoprire quali file sono stati cambiati da allora,

git diff --name-only $base HEAD 

per mostrare la differenza accumulata

git diff $base HEAD 

Quando si desidera descrivere un'intera serie di commit è possibile utilizzare la sintassi nella risposta Gabriele Petronella collegata sopra, master..HEAD è abbreviazione di HEAD ^master che significa "tutti i commit raggiungibili da HEAD, ma non inclusi i commit raggiungibili dal master". Manca endpoint di default a testa, in modo da poter dire git log --oneline master..

+0

Grazie mille. Relativamente nuovo da git quindi non ero a conoscenza del comando "merge-base". Questo risponde perfettamente alla mia domanda. – coding4fun

+0

Grazie! Se stai usando uno strumento di diff esterno come [Beyond Compare] (http://stackoverflow.com/q/2069490/266535), cambia l'ultima riga in 'git difftool $ base HEAD --dir'. È utile quando si esegue una revisione del codice del ramo di qualcun altro. – styfle

+0

grazie! mi hai salvato il giorno – seol

2

Per l'elenco dei file modificati e il diff effettivo, ha più senso se si conoscono 2 commit tra i quali si desidera confrontare.

Se volete vedere la diff tra START_SHA1 e END_SHA1, si potrebbe fare:

git diff START_SHA1 END_SHA1 

Se si desidera solo l'elenco dei file, si potrebbe fare:

git diff --name-only START_SHA1 END_SHA1 

Se anche vuoi sapere che tipo di modifica è stata inserita nel file (come A, M, D, C, R, U), puoi fare:

git diff --name-status START_SHA1 END_SHA1 
1

Supponendo che germogliò da master,

1. Quali file sono stati modificati dal ramificazione?

git diff master...<branchname> --name-only 

2. Qual è la piena diff dal ramificazione?

git diff master...<branchname> 

3.Qual è il registro di commit dalla ramificazione?

git log master..<branchname> 

Non è necessario specificare <branchname> se avete controllato fuori (ad esempio, git diff master...).

Nota:git diff richiede dot triple ... e git log richiede doppio punto .. per ottenere il comportamento che si sta chiedendo.


Per spiegazioni su sintassi del punto, vedi:

+0

Preferisco 'git diff master ... --stat' quando voglio vedere un elenco di file modificati. – anishpatel

Problemi correlati