2013-04-21 23 views
41

spesso dimenticato che ho alcuni nuovi file e direttamente faccio,Git: commit e aggiungere automaticamente tutti i file non monitorate

git commit -a -m "My commit message" 

Questo impegna solo i file modificati, e devo fare aggiungere i file rimanenti in una nuova commettere. Ciò significa che ci sono due commit separati anche se logicamente fanno parte dello stesso compito.

Il modo più semplice che conosco per includere i file non monitorate nel commettere tramite due comandi consecutivi:

git add -A 
git commit -a -m "My commit message" 

E 'possibile avere lo stesso effetto come sopra in un unico comando?

+6

Perché non 'git commit --amend' precedente commettere Una volta aggiunto il file non monitorate ? – Richard

+0

'git add -A' ha questo messaggio nella pagina man:' Se non viene fornito , la versione corrente di Git viene impostata su "."; in altre parole, aggiorna tutti i file nella directory corrente e nelle sue sottodirectory. Questa impostazione predefinita cambierà in una futura versione di Git , quindi il modulo senza non dovrebbe essere utilizzato. ' –

risposta

0

Non è possibile utilizzare l'interfaccia predefinita git. Tuttavia, git supporta gli alias al numero.

Utilizzando un alias, è possibile richiamare un comando git diverso o persino eseguire script di shell arbitrari. Crea uno script contenente i due comandi e crea un alias.

Vedere the wiki per ulteriori informazioni sugli alias e this question per questo scenario specifico.

Modifica: notare che questa non è una buona idea. È probabile che finirai per aggiungere file non necessari per errore o per avere un alias inutile a causa di file non versionati nella struttura.

13

Creare un file nel percorso di esecuzione chiamato (senza estensione): git-add-commit-untracked

mettere questo in esso:

#!/bin/bash 
message=${0} 
git add -A 
git commit -am "$message" 

Poi: git-add-commit-untracked "Commit message"

è possibile utilizzare un nome più breve per la file però. L'ho lasciato a lungo a scopo illustrativo.

+5

Questo potrebbe essere più semplice come un alias git. Vedi la mia risposta qui: http://stackoverflow.com/questions/16068968/is-it-possible-to-skip-the-staging-area-and-also-commit-untracked-new-files-t/16069173#16069173 –

0

Sì, ho avuto lo stesso problema come te in passato. Ho preferito usare git command, ma ho avuto grossi problemi perché la guardia in rail ha cambiato molti file senza avviso :)

Così ora, ogni volta che commetto un nuovo codice, provo a usare l'interfaccia utente per fare questo (git gui) e ricorda di non usare mai git commit -a perché non sei sicuro di quali file sono stati modificati! Dopo aver rebase il nuovo codice, si prega di gitk di visualizzare l'albero di git, in modo da poter conoscere l'impegno durato, i committer, i file di commit e così via.

7

Qui ci sono alcune opzioni:

  • Usa git commit --amend in modo che si finisce con un solo commit dopo aver aggiunto i file non monitorate (ma non se hai già spinto il commit precedente);
  • Utilizzare ;
  • Creare un alias o uno script che aggiunge automaticamente nuovi file (esempi in altre risposte).Qui ci sono due alias che uso proprio per questo scopo:

    [alias] 
        untracked = ls-files --other --exclude-standard 
        add-untracked = !git add $(git untracked) 
    
  • Squash tuoi due commit utilizzando git rebase -i, git reset <commit prior to first commit> e git commit o git merge --squash su un altro ramo.

Tuttavia, non di override un comando incorporato, come commit con un alias, quindi è ancora a voi per ricordare di aggiungere i file che si desidera per l'indice prima di commettere è possibile.

Sfortunatamente, non è possibile specificare i percorsi insieme a git commit -a; Ho appena provato git commit -a $(git untracked) e mi ha detto fatal: Paths with -a does not make sense. Quindi per rispondere alla tua domanda di base, penso che uno script git sarebbe l'unico modo non interattivo.

+4

Comunque utile, * risponde a una domanda diversa *, allora l'auhor ha chiesto. – gorn

+0

@gorn Non sono sicuro di quale domanda pensi sia stata posta, ma questa risposta fornisce diverse opzioni e fa riferimento anche ad altre risposte. – Richard

+1

La domanda è abbastanza chiara "È possibile avere lo stesso effetto come sopra in un comando?", Quindi in pratica "Come eseguire l'intera azione in un comando ed evitare l'errore di non aggiungere alcuni file" e questo risponde agli indirizzi " Come riparare le conseguenze dopo che l'errore è stato fatto ". Penso che sia fonte di confusione per i nuovi arrivati ​​ed è per questo che commento qui. – gorn

7

È possibile definire un alias per aggiungere tutto prima del commit. Basta mettere questo le linee nel proprio file ~/.gitconfig:

[alias] 
     ca = !sh -c 'git add -A && git commit -m \"$1\"' - 

quindi utilizzare il vostro alias come questo:

$ git ca 'Your commit message' 
+0

QUESTO. Assolutamente perfetto. – neokio

Problemi correlati