2013-08-30 12 views
30

Come best practice, si dovrebbe impegnarsi frequentemente, ma per rivedere il codice potrebbe essere necessario rivedere una patch composta da più commit contemporaneamente. C'è un modo in cui più commit possono essere rivisti e uniti o rifiutati contemporaneamente?Gerrit: combina più commit in un "cambiamento"

risposta

13

No, Gerrit attualmente non supporta i commit in una revisione. Tuttavia, ci sono un paio di altre opzioni.

A $ DAYJOB, il mio team utilizza i rami di funzionalità per modifiche più grandi. I commit più piccoli vengono esaminati/uniti al ramo della funzione individualmente, ma il ramo della funzione viene unito solo una volta che tutto è in una buona posizione e tutti gli sviluppatori sono felici.

Gerrit supporta anche i rami argomento, che rappresentano un modo conveniente per raggruppare i commit relativi. Vengono discussi brevemente nello documentation. Questi commit devono comunque essere esaminati/uniti singolarmente, ma possono essere raggruppati rapidamente nell'interfaccia utente web.

22

Una cosa che si può fare è unire uno squash a un ramo temporaneo e quindi postare quella modifica per la revisione.

git checkout -b feature 
git commit -m "start feature" 
... 
git commit -m "finish feature" 
git checkout -b feature-review master 
git merge --squash feature 
git commit 

Ora la filiale feature-review conterrà lo stesso diff rispetto al master come feature ha fatto, ma con solo un singolo commit.

+1

Grazie per la risposta. Ma come si spinge/unisci per padroneggiare dopo le revisioni del codice che possono comportare modifiche al codice? – Nonos

+0

Puoi continuare a lavorare su qualsiasi ramo (sia 'feature' o' feature-review') che vuoi, e spingerlo quando è fatto. Puoi perfino ripetere il processo di fusione di squash per il tuo commit finale da padroneggiare, a seconda di quanto tieni alla storia e abbattere i commit. –

+5

'git merge --squash'will riscrive la cronologia e non ti permetterà di usare' git bisect' sulla funzione – summerbulb

0

Se è necessario aggiornare le richieste di recensione già postato allora si può sfruttare modificare commit:

git commit --amend -C HEAD 

e poi spingere per conseguente revisione.

Credo che i commit pubblici debbano essere atomici e contenere il gruppo completo di funzionalità a cui si desidera contribuire. Di solito non vuoi condividere tutti i tuoi commit intermedi. Quindi lo schiacciamento commette prima della revisione è una buona idea.

+0

Una scuola di pensiero dice che è meglio fare cambiamenti dirompenti come una sequenza di piccoli impulsi atomici, ognuno dei quali è pungibile per prod. La conservazione di questi piccoli commit rende più facile vedere cosa hai fatto e perché, più facile da eseguire, rende le bisections più utili e le recensioni più semplici e veloci (ad esempio quando un file di dati è stato ordinato e ha aggiunto una riga, questi due si impegna con due piccoli messaggi di commit rendono molto chiaro cosa è successo e perché. Squashing significa che il grande diff dal tipo oscura l'inserimento.) Questa idea è popolare nei posti migliori in cui ho lavorato. –