2010-07-12 12 views
9

Mi chiedo, come potrei evitare un commit in piccoli cambiamenti di codice. Ad esempio, a volte mi manca uno spazio tra i parametri o quel tipo di minuscola formattazione del codice. Il motivo per cui lo chiedo è perché in seguito devo spingere i miei commit in un repository remoto e non voglio includere quei piccoli cambiamenti.Come evitare di commettere piccole modifiche in git?

Qualche idea? Grazie

+2

Vedere anche http://stackoverflow.com/questions/2302736/trimming-git-checkins-squashing-git-history/2302947#2302947 per lo schiacciamento commette – VonC

+0

Si potrebbe anche voler considerare l'aggiunta di un hook pre-commit per aiutare rivedere il tuo stile di codifica. Con questo, puoi lamentarti se provi a commettere un codice che viola alcuni standard che hai impostato. Puoi aiutare a prevenire cattivi commit in primo luogo! L'esempio pre-commit hook ('.git/hooks/pre-commit.sample') cerca cose come gli spazi finali dopo le linee. Ad esempio, è possibile avvolgere il rientro GNU in uno script, per applicare uno stile di codifica specifico e inserirlo nel gancio di pre-commit. –

risposta

20

Aggiornamento: come altri hanno sottolineato, non apportare alcuna ridefinizione o riscrittura della cronologia di alcun tipo se si è passati a un'origine remota e si è condiviso questo codice con altri sviluppatori. Risposta breve: è pericoloso e rischioso!

Si consiglia di verificare il comando rebase per questo. Fa esattamente quello che stai chiedendo

Quello che fa è prendere commit più piccoli e combinarle in quelli più grandi

usarlo:

git rebase -i HEAD~5 

tuo editore si aprirà con gli ultimi 5 si impegna dal capo del ramo attuale, con qualche documentazione. Nel tuo caso vorrai usare squash. Il sito che ho linkato spiega davvero bene, hanno questo esempio:

pick 01d1124 Adding license 
squash 6340aaa Moving license into its own file 
squash ebfd367 Jekyll has become self-aware. 
squash 30e0ccb Changed the tagline in the binary, too. 

Questo pacchetto precedenti 3 commit e metterli tutti sotto lo stesso che hai contrassegnato come pick. È quindi possibile modificare il messaggio di commit e così via.

Buon divertimento

+0

Perché il downvote? – meagar

+0

+1. Lo schiacciamento è la strada da percorrere. Maggiori informazioni qui: http: //www.gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html – Jeet

+2

Qualsiasi cosa tu faccia, * non * fai questo se hai già inserito le tue modifiche: S – andrewdotnich

16

L'unico modo per apportare una modifica è con un commit. Tuttavia, potresti modificare un commit precedente per includere la nuova modifica, se lo desideri. Questa potrebbe essere la soluzione migliore quando non hai ancora inserito il commit precedente in un repository remoto.

Sono disponibili buone informazioni sull'emissione di git commit in the Git user's manual e in a blog post.

+0

Grazie per i collegamenti. Tuttavia, non mi piace lo stile di collegamento [clickhere]. Ecco un utile bookmarklet per generare collegamenti descrittivi: [Copia il link markdown o modificalo] (http://pastebin.com/qEafAErg) (collegamento pastebin) – takeshin

3

Uno dei migliori modi per affrontare questo è di usare git difftool per eseguire uno strumento visivo come xdiff o WinMerge su ogni file modificato prima di impegnarsi. Ciò semplifica l'annullamento delle modifiche minori e consente di rilevare le modifiche significative che hai dimenticato di aver apportato e di non essere pronto. Prendo un discreto numero di bug in questo modo. Ad esempio, un tag html mancante o extra può essere difficile da individuare quando si guarda il codice, ma è facile individuarlo quando si fa una diff.

+1

C'è qualche ragione per cui non vorrai t basta usare 'git diff'? Questo è uno dei suoi scopi principali ... – Cascabel

+0

@Jefromi, git diff non mi permette di modificare il codice e ripristinare porzioni di file. Inoltre, trovo molto più utile il pieno di una differenza affiancata del contenuto completo del file, mi aiuta a cogliere errori che potrei perdere con una differenza riga per riga (non sarei sorpreso se ci fosse un'opzione per questo, ma non compenserebbe la mancanza di editing) – mikerobi

+0

Hai provato git difftool? – bstpierre

Problemi correlati