2011-01-07 18 views
24

Sto usando Git per il mio progetto e cercando di seguire le migliori prassi:Mostra solo storia di una filiale in un Git registro

  1. Io lavoro su un ramo argomento
  2. Quando pronto, unire i argomento ramo nel mio dev ramo utilizzando git merge --squash. Ciò mantiene pulito il ramo dev. .
  3. Ogni volta che il dev ramo è stabile e la squadra decide che è tempo per un rilascio, si fondono il dev ramo nella maestro ramo, senza utilizzando squash e tag che commettono come una liberazione versione.

Questo dovrebbe mantenere la nostra storia, e l'utilizzo di gitk, possiamo vedere dove tutti i commit sono disponibili in. Tuttavia, voglio essere in grado di vedere solo i commit applicate al maestro ramo. Ho provato:

git log master 
git show-branch 

Nessuno di questi mostrano solo la storia del maestro ramo. C'è un modo per farlo facilmente?

+0

Non è possibile eseguire il checkout nel ramo "master" e fare un "log git"? – yasouser

risposta

21

Se sto capendo correttamente, vuoi vedere le unioni di nuovo in master, ma non la storia di quelle che si uniscono. Credo che:

git log --merges 

ti darà quello che vuoi.

AGGIORNAMENTO: L'aggiunta di --first-parent dovrebbe risolvere il problema dai suoni di esso.

git log --merges --first-parent 

--first-genitore

Follow only the first parent commit upon seeing a merge commit. 

Questa opzione può dare una migliore visione quando si visualizza l'evoluzione di un particolare argomento ramo , perché si fonde in un ramo argomento tendono ad essere solo in caso di aggiornamento a aggiornato di volta in volta, e questa opzione consente di ignorare il commit individuale portato in t o la cronologia da una tale unione.

+1

Quasi, ma sfortunatamente questo mostra anche le fusioni avvenute nel ramo * dev *. Voglio solo vedere le unioni da * dev * a * master * –

+1

Il primo genitore non è necessariamente dove il ramo è stato prima, è determinato durante l'unione (il ramo in cui è avvenuta l'unione). Se si esegue l'inoltro veloce a un'unione, il primo genitore è l'altro ramo. – steabert

3

Poiché Git non memorizza informazioni su quale ramo è nascente da quale altro, non esiste un modo automatico per indovinare quale ramo si potrebbe desiderare di mostrare.

A tale proposito, --first-parent non sarà di aiuto, soprattutto perché è facile avere più di un master, ad esempio. Considerare:

wc1$ git clone git://shared.com/repo 
wc1$ (hack code, git commit) 
wc2$ git clone git://shared.com/repo 
wc2$ (hack code, git commit, git push somewhere) 
wc1$ git fetch origin; git merge origin/master; git push somewhere master; 

(Sentiti libero di prendere un progetto a caso e fai questo esercizio.) Grafico.Quindi non è possibile rappresentare graficamente "solo un ramo", anche se i commit sono stati taggati con il nome del ramo su cui sono stati creati (perché entrambi sono master).

+1

Supponiamo in situazioni come questa in cui più rami sono stati chiamati "master", che si desidera vederli tutti. (In effetti, quando ho voluto qualcosa di simile alla domanda originale qui, di solito è esattamente quello che volevo - ci sono state storie multiple, e ho voluto vederle tutte.) Quindi la risposta a "quale ramo che potresti volere "essere" tutti "- non c'è bisogno di risolverlo in uno solo. –

8

Sfortunatamente, Git non memorizza le informazioni sulle diramazioni per un commit e le commit non appartengono a un ramo. I rami in Git sono solo "tag mobili" in una sequenza di commit e NON una sequenza di commit come ci si aspetterebbe.

Quindi in pratica non è possibile visualizzare i commit che appartengono a un ramo poiché non esiste tale concetto in Git.

Problemi correlati