2012-06-06 15 views
7

Per ogni difetto nel codice creo un ramo separato. Quando difetto è fissata ho fondersi questo ramo in master, quindi non ho la storia come illustrato di seguito (vediamo due rami con correzioni):Ottieni diff git per ogni ramo unito

  defect1 fix   defect2 fix 
     a---b---c---d   e---f 
     /   \  / \ 
---o---1---x---y---z---2---o---3---w---4---o--- 

Il problema è come ottenere diff per fix1 (tra l'inizio filiale (1) e branch end (2)) o fix2 (diff tra (3) e (4)) in qualsiasi momento (ad es. per qualsiasi difetto chiuso in passato).

Aggiornamento: domanda reale è come capire SHA summs di a e d o e e f per eseguire il prossimo comando ovvio diff diff <commit> <commit>

+0

Proprio come un commento. Plastic SCM (www, plasticscm.com) si adatta perfettamente al ramo per tipo di attività/difetto.Usando la plastica puoi fare clic con il tasto destro su un ramo e premere il ramo diff. Usando la riga di comando puoi fare 'cm diff ' –

risposta

6

La risposta è semplice:

git diff 1..d 

Questo mostra le differenze tra il punto di diramazione della filiale defect1 fix (ovvero 1) e la sua fine (ovvero d).

Al fine di trovare l'inizio del ramo defect1 fix, utilizzare

git merge-base master defect1-fix-branch 

come indicato in questa risposta: https://stackoverflow.com/a/2458173/520162.
Questo ti dà 1 secondo la documentazione di git merge-base.

La fine del ramo defect1 fix viene semplicemente identificata dal nome. Quindi, trovare tutte le differenze introdotte nel defect1 fix, è necessario fare

git diff 1..defect1-fix-branch 
+0

Destra, voglio le modifiche tra ' .. ' e la domanda è come capire 'SHAs' di' a' e 'd' se non sono stati taggati. –

+0

@AlexanderNikolayev: vedere la risposta aggiornata. – eckes

+1

Non dovrebbe essere 'git diff .. '? Perché dovresti includere diff di '1' e anche' a' (che è parte dello sviluppo del ramo). – Shahbaz

1

Che dire:

git diff <commit> <commit> 

Dove i parametri di commit sono i checksum SHA dei commit attuali.

+1

Sì, ma come calcolare i checksum SHA di questi commit? –

+0

È possibile controllarlo dal 'git log' –

0

Se volete vedere ciò che cambia un ramo di caratteristica introdotta, dopo che è stata fusa, si esegue semplicemente:

git diff HEAD^..HEAD 

Sul ramo master. Ciò mostra le differenze tra il primo genitore HEAD (merge commit) e HEAD, mostrando in modo efficace le differenze dell'intera fusione di feature branch introdotta nel ramo master.

Non c'è bisogno di fare le cose complesse :)