2010-09-02 15 views
34

È ridondante per eseguire git add . e quindi git commit -am "commit message"?È git commit -am ridondante, se devo aggiungere git prima?

Posso solo eseguire git add . e quindi git commit -m "commit message" o, in alternativa, solo git commit -am "commit message"?

+5

Penso che si dovrebbe esplicitamente dichiari la tua ipotesi di essere nel livello più alto del tuo progetto; 'git add .' e' git commit -a' realizzeranno cose molto diverse se ci si trova in una sottodirectory. – meagar

risposta

42

Git add + git commit -m impegna solo i file aggiunti (nuovi e precedentemente tracciati), ma git commit -am impegna tutte le modifiche sui file rilevati, ma non aggiunge nuovi file.

+3

come indicato, 'git commit -am' non aggiungerà file non tracciati, ma ho pensato di far notare che' git add -u' aggiungerà solo (* u * pdate) articoli attualmente _tracked_ pure ... – johnny

1

L'opzione -a indica a git di mettere in scena i file modificati per l'aggiunta: indica "tutto" e non "aggiungi". Se non vuoi che il contenuto di un nuovo file venga aggiunto a git, devi aggiungerlo usando git add prima di eseguirlo.

Se è già stato effettuato un git add ., ha già aggiunto tutti i file nella directory corrente, vale a dire i file nuovi e modificati. Quindi non è necessario un commutatore -a per mettere nuovamente in scena il contenuto. Quindi puoi giustamente seguirlo con un git -m "msg"

4

Penso che alcune delle risposte precedenti non hanno visto il periodo dopo git add (la tua domanda originale e alcune delle risposte sono state modificate per rendere il periodo più chiaro).

git add . aggiunge tutti i file nella directory corrente (e qualsiasi sottodirectory) all'indice (tranne quelli ignorati da .gitignore).

L'opzione -a a git commit includerà tutte le modifiche ai file già monitorati da git, anche se tali modifiche non sono state ancora aggiunte all'indice.

Di conseguenza, se tutti i file sono già stati tracciati da git, allora i due approcci hanno lo stesso effetto. D'altra parte, se sono stati creati nuovi file, allora lo git add .; git commit li aggiungerà al repository, mentre lo git commit -a no.

git add .; git commit -a è effettivamente ridondante. Tutte le modifiche sono già state aggiunte all'indice, pertanto lo -a non fa nulla.

+0

You ho appena detto quello che ho detto con più parole. Quando qualcuno dice 'git add' significa che aggiungono i file che vogliono con esso, lascia che sia. o un elenco di file. La differenza è comunque evidente, -am non aggiungerà nuovi file. – Tuminoid

8

In realtà, git commit -a non è sempre ridondante, in quanto rimuove anche i file! Ad esempio hai due file: un file è rintracciato l'altro no. Ora si desidera eliminare il tracciato (ovunque) e aggiungere il non tracciato.

Quindi si rimuove il file tracciato. Se si utilizza solo git add . e quindi git commit, verrà tracciato il nuovo ma non verrà eliminato il file precedente nel repository.

Quindi si esegue git rm … o si utilizza git commit -a.

+1

Questa è la risposta corretta effettiva che risponde direttamente alla domanda. – CDR

25

Non è ridondante eseguire git commit -am se si eliminano i file rilevati. Vedi ulteriori spiegazioni delle opzioni di seguito.

Finché ci si trova nella directory principale e si desidera aggiungere tutti i nuovi file, le modifiche e le eliminazioni, si desidera 3) di seguito.

1) Confermare nuovi file e modifiche su file precedentemente registrati, ma non aggiungere cancellazioni.

Con Git < 2.0:

$ git add . 
$ git commit -m 

Con Git> = 2.0:

$ git add --ignore-removal . 
$ git commit -m 

2) Impegnarsi modifiche e le cancellazioni di file monitorati, ma Non aggiungere nuovi file.

$ git commit -am 

3) Impegnarsi nuovi file e tutto è cambiato monitorati i file (sia modifiche e delezioni). O:

Con Git < 2.0:

$ git add . 
$ git commit -am 

... Oppure:

$ git add -A 
$ git commit -m 

Con Git> = 2.0:

$ git add . 
$ git commit -m 
+0

Quindi, 'git add .' +' git commit -am' equivale a 'git add -A'? – user1322092

+0

Se si esegue anche un commit dopo la seconda alternativa, sì. 'git add .' +' git commit -am' è equivalente a 'git add -A' +' git commit -m'. Ho aggiornato la mia risposta per riflettere questo. –

+0

'git add .' aggiunge le cancellazioni di file da Git 2.0.0:" git add "è lo stesso di" git add -A "ora" (dalle note di rilascio). Ho aggiornato il post di conseguenza. –