Comment puis-je mettre en scène et valider tous les fichiers, y compris les fichiers nouvellement ajoutés, à l'aide d'une seule commande?

425

Comment puis-je mettre en scène et valider tous les fichiers, y compris les fichiers nouvellement ajoutés, à l'aide d'une seule commande?

Anantha Kumaran
la source
3
Ce qui est frustrant, c'est que cela était auparavant possible et que c'était la syntaxe standard pour valider et ajouter de nouveaux fichiers: git commit -a Mais fidèle à la forme, la syntaxe git a changé. Il a confondu les utilisateurs existants (et cassé leurs scripts), éliminé les fonctionnalités utiles et remplacé un indicateur inutile.
fijiaaron
1
Il y en a un double à git add -A, git commit dans une seule commande? . La réponse acceptée ici est similaire à la réponse acceptée ici, mais suggère de créer un alias git pour raccourcir la saisie impliquée (et montre comment le faire).
Mark Amery du
Possibilité de doublon de Git ajouter et valider en une seule commande
Luciano

Réponses:

568

Est-ce que

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

compter comme une "commande unique"?

Modifier en fonction de la réponse de @ thefinnomenon ci - dessous :

Pour l'avoir comme un git alias, utilisez:

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

et valider tous les fichiers, y compris les nouveaux fichiers, avec un message avec:

git coa "A bunch of horrible changes"

Explication (à partir de la git adddocumentation ):

-A, --all, --no-ignore-removal

Mettez à jour l'index non seulement là où l'arborescence de travail a une correspondance de fichier, mais aussi là où l'index a déjà une entrée. Cela ajoute, modifie et supprime les entrées d'index pour correspondre à l'arborescence de travail.

Si non <pathspec>est donné lorsque l'option -A est utilisée, tous les fichiers de l'arborescence de travail entière sont mis à jour (les anciennes versions de Git étaient utilisées pour limiter la mise à jour au répertoire en cours et à ses sous-répertoires).

Ian Clelland
la source
3
qu'en est-il du message de validation?
Narendra Jaggi
11
@NarendraJaggi git add -A && git commit -m "Your Message"
Dr.jacky
1
on pourrait le mettre dans son propre fichier .sh ou .bat et simplement l'utiliser comme une seule commande. Le message peut être param1
BlueWizard
Et vous pouvez également ajouter des raccourcis pour les commandes git de base dans votre .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
Dans PowerShell, remplacez "&&" par ";" pour exécuter les deux commandes, comme ceci:git add -A ; git commit -m "Your Message"
Rafael Miceli
415

Cette commande ajoute et valide tous les fichiers modifiés, mais pas les fichiers nouvellement créés .

git commit -am  "<commit message>"

De 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.
Jai Keerthi
la source
101
Cela ne répond pas réellement à la question, en fait spécifiquement (en gras pas moins) exclut l'un des éléments clés de la solution recherchée.
Arunas
6
N'ajoute ni ne valide les fichiers non suivis.
b15
3
Mais cela couvre la situation la plus typique lorsque vous vous engagez après "git add -A" et remarquez que vous avez oublié de changer quelque chose de petit dans le code. Je déteste écrire plusieurs fois le même message de commit à partir de zéro
KorbenDallas
mais le thread starter dit TOUS LES FICHIERS, donc, je pense que celui-ci ne compte pas
Frederick G. Sandalo
Et vous pouvez également ajouter des raccourcis pour les commandes git de base dans votre .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

J'utilise cette fonction:

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

Dans mon fichier de configuration zsh, je peux donc simplement faire:

> gcaa This is the commit message

Pour mettre en scène et valider automatiquement tous les fichiers.

phlppn
la source
1
pour bash-likefunction gcaa() { git add --all && git commit -m "$*" && git push }
Damilola
1
@Damilola - que voulez-vous dire par bash-like ? la syntaxe dans la réponse fonctionne aussi en bash
Eliran Malka
c'est bien, j'ai déjà utilisé un alias comme gaa && gc -m "my commit"mais c'est tellement plus agréable ... <se précipite pour changer bashrc ..>
andy mccullough
24

One-liner pour mettre en scène TOUS les fichiers ( modifiés , supprimés et nouveaux ) et valider avec un commentaire:

git add --all && git commit -m "comment"

http://git-scm.com/docs/git-add
http://git-scm.com/docs/git-commit

Yarin
la source
one-liner, mais pas une seule commande (c'est ce que le PO a demandé)
Eliran Malka
24

Je ne sais pas pourquoi ces réponses dansent autour de ce que je pense être la bonne solution, mais pour ce que ça vaut ici, c'est ce que j'utilise:

Créez un alias:

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

Ajoutez tous les fichiers et validez avec le message:

git coa "A bunch of horrible changes"

REMARQUE: coaest l'abréviation de tout engager et peut être remplacé par tout ce que votre cœur désire

lefinnomenon
la source
1
Aucune autre réponse que celle-ci ne simplifie avec succès le processus de validation de tous avec un message.
Seph Reed
2
C'est génial, cherchait le git aliaschemin, le reste est ennuyeux.
Qortex
9

S'engager dans git peut être un processus en plusieurs étapes ou une étape selon la situation.

  1. Cette situation est celle où vous avez plusieurs fichiers mis à jour et que vous souhaitez valider:

    Vous devez ajouter tous les fichiers modifiés avant de valider quoi que ce soit.

    git add -A
    

    ou

    git add --all
    
  2. Après cela, vous pouvez utiliser valider tous les fichiers ajoutés

    git commit
    

    avec cela, vous devez ajouter le message pour ce commit.

King Linux
la source
6

Si vous voulez juste un moyen "rapide et sale" de cacher les modifications sur la branche courante, vous pouvez utiliser l'alias suivant:

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

Après avoir exécuté cette commande, vous pouvez simplement taper git temppour que git valide automatiquement toutes vos modifications dans la branche actuelle sous la forme d'un commit nommé "Temp". Ensuite, vous pouvez utiliser git reset HEAD~plus tard pour "annuler git commit --amendla validation " des modifications afin de pouvoir continuer à travailler dessus, ou pour ajouter d'autres modifications au commit et / ou lui donner un nom correct.

Ajedi32
la source
4

J'ai dans ma config deux alias:

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

si je suis trop paresseux, je commets simplement tous les changements avec

git foo

et juste pour faire un commit rapide

git coa "my changes are..."

coa signifie "commit all"

SystematicFrank
la source
9
Je détesterais travailler avec un référentiel rempli de messages de validation disant «aucun», et je rejetterais également tout RP sur cette base. Malheureusement, la seule façon d'apprendre l'importance d'avoir de bons messages de validation est lorsque vous devez revenir pour auditer quelque chose écrit il y a longtemps ("cette ligne cause un bug ... pourquoi a-t-elle été ajoutée, et casser si je le change / le supprime? ").
gregmac
1
Les commits avec «aucun» ne sont jamais destinés à rester longtemps. Normalement, je démarre ma propre branche de fonctionnalités, fais des micro-commits et les écrase en quelque chose de plus raisonnable avant une fusion. De toute évidence, les personnes qui commettent pour chaque fonction modifiée et qui ne se soucient pas d'un journal git complet n'ont pas besoin de cela.
SystematicFrank du
1
J'utilise 'wip' (abréviation de "work in progress") au lieu de 'none' à cet effet et je ne pousse ces commits vers mes succursales privées.
Sergej Koščejev
Ce n'est toujours pas utile, car finalement ces validations "wip" ou "none" en feront une branche que les autres personnes verront et pollueront le journal des messages. Si vous écrasez tous vos commits avant de pousser, ce serait acceptable, mais c'est toujours ennuyeux pour l'équipe.
Jordan
C'est une idée de grille, et en la combinant avec la réponse suivante, vous pouvez réellement obtenir la réponse 100% précise pour l'OP. J'ai en fait décrit les étapes nécessaires (en utilisant git-bash) dans ma réponse. ( stackoverflow.com/a/43442269/869239 )
VeRo
3

Exécutez la commande donnée

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

Cependant, même si cela semble être une seule commande, ce sont deux commandes distinctes qui s'exécutent une par une. Ici, nous venons &&de les combiner. Ce n'est pas très différent de courir git add .et git commit -m "Changes Committed"séparément. Vous pouvez exécuter plusieurs commandes ensemble, mais la séquence est importante ici. Comment si vous voulez pousser les modifications sur le serveur distant avec la mise en scène et la validation, vous pouvez le faire comme indiqué,

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

Au lieu de cela, si vous modifiez la séquence et placez le push à la première, elle sera exécutée en premier et ne donnera pas le push souhaité après la mise en scène et la validation simplement parce qu'elle a déjà été exécutée en premier.

&&exécute la deuxième commande sur la ligne lorsque la première commande revient avec succès, ou avec un niveau d'erreur de 0. L'opposé de &&est|| , qui exécute la deuxième commande lorsque la première commande échoue, ou avec un niveau d'erreur de 1.

Vous pouvez également créer alise as git config --global alias.addcommit '!git add -a && git commit -m'et l'utiliser commegit addcommit -m "Added and commited new files"

Kiran Maniya
la source
2

Excellentes réponses, mais si vous recherchez une ligne unique, faites tout, vous pouvez concaténer, alias et profiter de la commodité:

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

Il s'agit d'une seule ligne mais de deux commandes, et comme mentionné, vous pouvez alias ces commandes:

alias git-aac="git add * && git commit -am " (l'espace à la fin est important) car vous allez paramétrer la nouvelle commande main courte.

À partir de ce moment, vous utiliserez cet alias:

git-acc "<commit message>"

Vous dites essentiellement:

git, ajoutez pour moi tous les fichiers non suivis et validez-les avec ce message de validation donné.

J'espère que vous utilisez Linux, j'espère que cela vous aidera.

VeRo
la source
0

Vous pouvez écrire un petit script (regardez la réponse de Ian Clelland) appelé git-commitallqui utilise plusieurs commandes git pour effectuer ce que vous voulez faire.
Placez ce script dans votre n'importe où dans votre $PATH. Vous pouvez l'appeler par git commitall... très pratique!

Trouvé ici (question et toutes les réponses malheureusement supprimées, uniquement visible avec une grande réputation)

tanascius
la source
Le fil entier est une bonne lecture ... c'est pourquoi je l'ai lié ^^
tanascius
@Dimitri - malheureusement, certains étudiants ont décidé de supprimer ce fil utile. Il est toujours visible avec une grande réputation, donc je garde le lien ici.
tanascius
0

essayez d'utiliser:

git add . && git commit -m "your message here"
Photon
la source