Come posso mettere in scena e eseguire il commit di tutti i file, inclusi quelli appena aggiunti, usando un singolo comando?


425

Come posso mettere in scena e eseguire il commit di tutti i file, inclusi quelli appena aggiunti, usando un singolo comando?


3
La cosa frustrante è che questo era possibile ed era una sintassi standard per eseguire il commit e aggiungere nuovi file: git commit -a Ma vero per la forma, la sintassi git è cambiata. Ha confuso gli utenti esistenti (e ha rotto i loro script), eliminato funzionalità utili e sostituito un flag non necessario.
fijiaaron,

1
C'è un duplicato di questo in git add -A, git commit in un comando? . La risposta accettata è simile alla risposta accettata qui, ma suggerisce di creare un alias git per abbreviare la digitazione in questione (e mostra come farlo).
Mark Amery,

Risposte:


568

fa

git add -A && git commit -m "Your Message"

conta come un "comando singolo"?

Modifica in base alla risposta di @ thefinnomenon di seguito :

Per averlo come un git alias, utilizzare:

git config --global alias.coa '!git add -A && git commit -m'

e impegna tutti i file, inclusi i nuovi file, con un messaggio con:

git coa "A bunch of horrible changes"

Spiegazione (dalla git adddocumentazione ):

-A, --all, --no-ignore-rimozione

Aggiorna l'indice non solo dove l'albero di lavoro ha una corrispondenza file ma anche dove l'indice ha già una voce. Ciò aggiunge, modifica e rimuove le voci di indice in modo che corrispondano all'albero di lavoro.

Se non <pathspec>viene fornita alcuna opzione quando viene utilizzata l'opzione -A, vengono aggiornati tutti i file nell'intero albero di lavoro (le vecchie versioni di Git venivano utilizzate per limitare l'aggiornamento alla directory corrente e alle sue sottodirectory).


3
che dire del messaggio di commit?
Narendra Jaggi,

11
@NarendraJaggi git add -A && git commit -m "Il tuo messaggio"
Dr.jacky,

1
si potrebbe metterlo nel proprio file .sh o .bat e usarlo come unico comando. Il messaggio potrebbe essere param1
BlueWizard,

E puoi anche aggiungere scorciatoie per i comandi git di base nel tuo .bashrc: alias gpl = 'git pull' alias gps = 'git push' alias gc = 'git commit' alias gs = 'git status' alias gd = 'git diff' alias ga = 'git add' alias gck = 'git checkout' alias gb = 'git branch' alias gl = 'git log' alias lcp = 'git format-patch -1 HEAD' alias resetToMaster = 'git reset --hard origin / master '
ni3,

3
In PowerShell sostituire "&&" per ";" per eseguire entrambi i comandi, in questo modo:git add -A ; git commit -m "Your Message"
Rafael Miceli,

415

Questo comando aggiungerà e impegnerà tutti i file modificati, ma non i file appena creati .

git commit -am  "<commit message>"

Da man git-commit:

   -a, --all
       Tell the command to automatically stage files that have been modified
       and deleted, but new files you have not told Git about are not
       affected.

101
Questo in realtà non risponde alla domanda, in effetti in modo specifico (in grassetto non meno) esclude una delle parti chiave della soluzione cercata.
Arunas,

6
Non aggiunge o commette file non tracciati.
b15,

3
Ma copre la situazione più tipica quando ti impegni dopo "git add -A" e noti che hai dimenticato di cambiare qualcosa di piccolo nel codice. Odio scrivere lo stesso messaggio di commit più volte da zero
KorbenDallas,

ma l'avviatore di thread dice TUTTI I FILE, quindi, penso che questo non conti
Frederick G. Sandalo

E puoi anche aggiungere scorciatoie per i comandi git di base nel tuo .bashrc: alias gpl = 'git pull' alias gps = 'git push' alias gc = 'git commit' alias gs = 'git status' alias gd = 'git diff' alias ga = 'git add' alias gck = 'git checkout' alias gb = 'git branch' alias gl = 'git log' alias lcp = 'git format-patch -1 HEAD' alias resetToMaster = 'git reset --hard origin / master '
ni3,

26

Uso questa funzione:

gcaa() { git add --all && git commit -m "$*" }

Nel mio file di configurazione zsh, quindi posso solo fare:

> gcaa This is the commit message

Per mettere in scena e impegnare automaticamente tutti i file.


1
per bash-likefunction gcaa() { git add --all && git commit -m "$*" && git push }
Damilola,

1
@Damilola - cosa intendi con bash-like ? la sintassi nella risposta funziona anche in bash
Eliran Malka,

è bello, in precedenza ho usato un alias come gaa && gc -m "my commit"ma è molto più bello ... <si affretta a cambiare bashrc ..>
andy mccullough


24

Non sono sicuro del motivo per cui queste risposte danzano intorno a ciò che credo sia la soluzione giusta, ma per quello che vale qui è quello che uso:

Crea un alias:

git config --global alias.coa '!git add -A && git commit -m'

Aggiungi tutti i file e esegui il commit con il messaggio:

git coa "A bunch of horrible changes"

NOTA: coaè l'abbreviazione di commit all e può essere sostituito con qualsiasi cosa il tuo cuore desideri


1
Nessuna risposta diversa da questa semplifica con successo il processo di commit di tutti con un messaggio.
Seph Reed,

2
È fantastico, cercava la git aliasstrada, il resto è noioso.
Qortex,

9

Il commit in git può essere un processo a più fasi o un passaggio a seconda della situazione.

  1. Questa situazione è dove hai aggiornato più file e vuoi impegnarti:

    Devi aggiungere tutti i file modificati prima di eseguire il commit di qualsiasi cosa.

    git add -A
    

    o

    git add --all
    
  2. Successivamente è possibile utilizzare il commit di tutti i file aggiunti

    git commit
    

    con questo devi aggiungere il messaggio per questo commit.


6

Se vuoi solo un modo "rapido e sporco" per riporre le modifiche sul ramo corrente, puoi usare il seguente alias:

git config --global alias.temp '!git add -A && git commit -m "Temp"'  

Dopo aver eseguito quel comando, puoi semplicemente digitare git tempper fare in modo che git esegua automaticamente il commit di tutte le modifiche al ramo corrente come commit denominato "Temp". Quindi, puoi utilizzare in git reset HEAD~seguito per "annullare il commit" delle modifiche in modo da poter continuare a lavorarci o git commit --amendper aggiungere altre modifiche al commit e / o assegnargli un nome proprio.


4

Ho nella mia configurazione due alias:

alias.foo=commit -a -m 'none'
alias.coa=commit -a -m

se sono troppo pigro, commetto tutte le modifiche con

git foo

e solo per fare un rapido commit

git coa "my changes are..."

coa sta per "commit all"


9
Odierei lavorare con un repository pieno di messaggi di commit che dicono "nessuno", e rifiuterei anche qualsiasi PR su quella base. Sfortunatamente, l'unico modo in cui puoi imparare l'importanza di avere buoni messaggi di commit è quando devi tornare a controllare qualcosa scritto molto tempo fa ("questa riga sta causando un bug ... perché è stata aggiunta, e farà qualsiasi cosa rompere se lo cambio / rimuovo? ").
Gregregac,

1
Gli impegni con "nessuno" non sono mai destinati a rimanere a lungo. Normalmente inizio il mio ramo di funzionalità, eseguo microimpegni e li schiaccio in qualcosa di più ragionevole prima di unire. Ovviamente le persone che si impegnano per ogni funzione modificata e non si preoccupano di un log git completo non hanno bisogno di questo.
SystematicFrank

1
Uso 'wip' (abbreviazione di "work in progress") invece di "none" per questo scopo e spingo tali commit solo nelle mie filiali private.
Sergej Koščejev l'

È ancora inutile, perché alla fine quei commit "wip" o "none" lo trasformeranno in un ramo che altre persone vedono e inquineranno il registro dei messaggi. Se stai schiacciando tutti i tuoi impegni prima di spingere, sarebbe accettabile, ma per il resto è comunque fastidioso per la squadra.
Giordania,

Questa è un'idea grata, e combinandola con la risposta successiva puoi effettivamente ottenere la risposta accurata al 100% per il PO. In realtà ho delineato i passaggi necessari (usando git-bash) nella mia risposta. ( Stackoverflow.com/a/43442269/869239 )
VeRo

3

Esegui il comando dato

git add . && git commit -m "Changes Committed"

Tuttavia, anche se sembra un singolo comando, è due comandi separati eseguiti uno per uno. Qui li abbiamo usati solo &&per combinarli. Non è molto diverso da quello di correre git add .e git commit -m "Changes Committed"separatamente. Puoi eseguire più comandi insieme ma la sequenza è importante qui. Se, se desideri inviare le modifiche al server remoto insieme alla gestione temporanea e al commit, puoi farlo come indicato,

git add . && git commit -m "Changes Committed" && git push origin master

Invece, se si modifica la sequenza e si mette pushal primo posto, verrà eseguito per primo e non darà la spinta desiderata dopo la messa in scena e il commit solo perché è già stato eseguito per primo.

&&esegue il secondo comando sulla riga quando il primo comando viene restituito correttamente o con un livello di errore pari a 0. L'opposto di &&è ||, che esegue il secondo comando quando il primo comando non ha esito positivo o con un livello di errore pari a 1.

In alternativa, puoi creare alise as git config --global alias.addcommit '!git add -a && git commit -m'e usarlo comegit addcommit -m "Added and commited new files"


2

Grandi risposte, ma se cerchi una linea singola fai tutto, puoi concatenare, alias e goderti la comodità:

git add * && git commit -am "<commit message>"

È una riga singola ma due comandi e, come detto, puoi alias questi comandi:

alias git-aac="git add * && git commit -am " (lo spazio alla fine è importante) perché stai per parametrizzare il nuovo comando di scelta rapida.

Da questo momento in poi, utilizzerai questo alias:

git-acc "<commit message>"

In pratica dici:

git, aggiungi per me tutti i file non tracciati e esegui il commit con questo dato messaggio di commit.

Spero che tu usi Linux, spero che questo aiuti.


0

Puoi scrivere un piccolo script (guarda la risposta di Ian Clelland) chiamato git-commitallche utilizza diversi comandi git per eseguire ciò che vuoi fare.
Inserisci questo script ovunque nel tuo $PATH. Puoi chiamarlo da git commitall... molto utile!

Trovato qui (domanda e tutte le risposte purtroppo cancellate, visibili solo con alta reputazione)


L'intero thread è una buona lettura ... ecco perché l'ho collegato ^^
tanascius

@Dimitri - sfortunatamente alcuni studiosi hanno deciso di eliminare questa discussione utile. È ancora visibile con alta reputazione, quindi tengo il link qui.
Tanascius

0

prova a usare:

git add . && git commit -m "your message here"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.