2011-09-01 21 views
20

Sto lavorando a un progetto (da solo) e per ogni funzionalità che sviluppo creo un nuovo ramo, lavoro su questa funzione, quindi lo unisco al master. Quindi normalmente non lavoro mai su due rami diversi contemporaneamente e non tocco mai master mentre lavoro su un ramo.Git branches & commit history after merge

Quando unisco un ramo, vedo che (utilizzando gitx e gitk) la cronologia del ramo principale ottiene tutti i commit che ho eseguito sul ramo unito. Voglio dire, se ho qualcosa di simile:

master a-b-c-d 
       \z-x-y-- 
       |branch name 

dopo l'unione ottengo:

a-b-c-d-z-x-y 
      |branch name 

Sì, vedo il nome del ramo unito evidenziato (utilizzando gitx e gitk), ma quello che mi aspettavo è qualcosa che mostra esattamente dove sono fatte commit (a quale ramo) come:

master a-b-c-d--------M-- 
       \-z-x-y-/ 
       |branch name 

Quindi mi aspetto di vedere un commit "M" che rappresenta l'unione che ho fatto da padroneggiare, no Per sembrare che tutti i commit che ho fatto al nuovo ramo siano stati fatti per padroneggiare.

Le mie aspettative sono corrette? O questo è normale comportamento git?

risposta

29

Questo è normale comportamento Git. Stai facendo quella che viene chiamata unione "avanti veloce", perché il tuo ramo è rigorosamente in anticipo rispetto al ramo master.

Se davvero si vuole preservare la storia ramo (anche se vi consiglio di non si preoccupano), allora è possibile utilizzare git merge --no-ff per forzarlo per creare una stampa commettere anche quando si può fare un aggiornamento di fast-forward.

+5

Vi sono alcuni vantaggi nell'usare '--no-ff' durante l'unione nei rami di funzionalità. Il principale è che si tratta di un ripristino one-shot per ripristinare la funzionalità. –

+0

Mille grazie per questa informazione utile. @ Cameron potresti spiegare perché non è raccomandato farlo? e posso "rappresentare" tutte le mie vecchie fusioni? (questo fondamentalmente perché ho bisogno di scrivere un rapporto sul mio progetto in modo che gli screenshot delle mie filiali siano utili) – Ansd

+2

@Ans: Non lo consiglio semplicemente perché non ne ho mai trovato un uso. Preferisco mantenere la storia del "master" il più semplice e lineare possibile, e non ho mai avuto bisogno di preoccuparmi di un ramo di funzionalità una volta che è stato fuso. @Il punto di Ray su un ripristino one-shot è valido, tuttavia, quindi potrebbe essere una buona ragione per usare 'no-ff'. Probabilmente non sarai in grado di rigenerare facilmente la cronologia del tuo ramo, anche se se hai ancora tutti i vecchi rami, potresti creare manualmente un ramo che unisce tutte le funzionalità nello stesso ordine in cui le hai unite in 'master'. –