git add
Ajouter le contenu des fichiers à l’index (zone de préparation)
La commande 'git add' met à jour l’index avec le contenu actuel de l’arbre de travail, pour préparer le contenu du prochain commit. L’index, aussi appelé zone de préparation, sert à préparer le contenu du prochain commit. Quand vous lancez 'git commit' sans autre argument, seules les modifications indexées sont committées. Cette commande peut être lancée plusieurs fois avant un commit pour ajouter des modifications progressivement.
Synopsis
git add [--verbose | -v] [--dry-run | -n] [--force | -f] [--interactive | -i] [--patch | -p] [--all | -A] [--update | -u] [--] [<pathspec>...]Options
Choisir la bonne option
Commandes d’indexation
Quels fichiers sont indexés selon la commande
| Commande | Nouveaux fichiers | Fichiers modifiés | Fichiers supprimés | Portée |
|---|---|---|---|---|
git add <file> | ✓ | ✓ | ✓ | Seulement le fichier indiqué |
git add . | ✓ | ✓ | ✓ | Dossier courant et en dessous |
git add -A | ✓ | ✓ | ✓ | Tout le dépôt |
git add -u | ✗ | ✓ | ✓ | Fichiers suivis seulement |
git add --no-all | ✓ | ✓ | ✗ | Ignore les suppressions |
Options interactives
Des options pour choisir finement ce qui est indexé
| Commande | Mode | Granularité | Cas d’usage |
|---|---|---|---|
git add -p | Patch | Bloc par bloc | Indexer certaines modifications d’un fichier |
git add -e | Éditeur | Ligne par ligne | Modifier le diff à la main avant d’indexer |
git add -i | Menu | Fichier par fichier | Menu d’indexation interactif complet |
Options d’aperçu et de sortie
Des options qui affichent des informations sans modifier la zone de préparation
| Commande | Action | Modifie l’index | But |
|---|---|---|---|
git add -n | Dry-run | ✗ | Prévisualiser ce qui serait préparé |
git add -v | Détaillé | ✓ | Afficher les fichiers au fur et à mesure de l’indexation |
git add --refresh | Rafraîchir | ✗ | Mettre à jour seulement les infos stat |
Fichiers particuliers
Des options pour les fichiers qui demandent un traitement spécial
| Commande | Gère | Comportement | Usage typique |
|---|---|---|---|
git add -f | Fichiers ignorés | Passer outre .gitignore | Ajouter un fichier normalement ignoré |
git add -N | Nouveaux fichiers | Intention d’ajout (vide) | Suivre un fichier pour git diff sans l’indexer |
git add --chmod=+x | Exécutables | Définir le mode du fichier | Rendre des scripts exécutables |
git add --sparse | Fichiers sparse | Hors du cône | Indexer des fichiers hors du sparse checkout |
Options avancées
Des options d’expert pour des cas précis
| Commande | But | Quand l’utiliser |
|---|---|---|
git add --renormalize | Réappliquer les filtres clean | Après avoir changé les fins de ligne dans .gitattributes |
git add --pathspec-from-file | Lire les chemins depuis un fichier | Indexer beaucoup de fichiers à partir d’une liste |
git add --ignore-errors | Continuer malgré les erreurs | Indexer ce qui peut l’être, sauter les échecs |
git add --no-warn-embedded-repo | Masquer l’avertissement de sous-module | Ajouter volontairement des dépôts imbriqués |
Exemples de workflows
git statusRelire d’abord toutes les modifications
git add -AIndexer tous les fichiers nouveaux, modifiés et supprimés
git commit -m "Your message"Committer toutes les modifications indexées
git add -pChoisir de façon interactive seulement la correction du bug (appuyez sur 'y' pour les blocs du correctif, 'n' pour ceux de la fonctionnalité)
git commit -m "Fix login validation bug"Committer seulement la correction du bug
git add -AIndexer maintenant les modifications restantes de la fonctionnalité
git commit -m "Add dark mode toggle"Committer la fonctionnalité séparément
git statusVoir ce qui est modifié et ce qui est non suivi
git add -uIndexer seulement les modifications des fichiers suivis
git statusVérifier que les nouveaux fichiers sont toujours non suivis
git commit -m "Update existing files"Committer sans les nouveaux fichiers
git add -n .Le dry-run montre ce qui serait ajouté
git diffRelire en détail les modifications réelles
git add .Si c’est bon, indexer pour de vrai
git add dist/bundle.jsCeci échoue - le fichier est ignoré
git add -f dist/bundle.jsL’ajout forcé passe outre .gitignore
git commit -m "Add build for deployment"Committer le fichier normalement ignoré
Touches du mode interactif
Raccourcis clavier des modes interactifs de git add. Ils fonctionnent en mode patch (-p) et en mode interactif (-i).
Mode patch
-pMode interactif
-iDépannage
Le fichier n’est pas ajouté (ignoré)
Cause : Le fichier correspond à un motif de .gitignore
Cherchez le motif correspondant dans .gitignore. Utilisez -f pour forcer l’ajout si c’est voulu.
git add -f <file>Erreur « Permission denied »
Cause : Le fichier est verrouillé par un autre processus ou vous n’avez pas le droit de lecture
Fermez les applications qui utilisent le fichier, ou vérifiez ses permissions. Utilisez --ignore-errors pour continuer avec les autres fichiers.
git add --ignore-errors .Il ne se passe rien avec git add
Cause : Les fichiers sont peut-être déjà indexés, ou il n’y a aucune modification à ajouter
Lancez git status pour voir l’état actuel. Les fichiers déjà indexés ne sont pas ajoutés de nouveau.
git statusLes nouveaux fichiers n’apparaissent pas dans git diff
Cause : Les fichiers non suivis n’apparaissent pas dans git diff par défaut
Utilisez git add -N pour marquer l’intention d’ajout ; git diff montrera alors le contenu.
git add -N <file> && git diffAvertissement sur un dépôt git imbriqué
Cause : Vous ajoutez un dossier qui contient son propre répertoire .git (un dépôt imbriqué)
Supprimez le dossier .git imbriqué, utilisez les sous-modules git, ou masquez l’avertissement.
git add --no-warn-embedded-repo <folder>Les fins de ligne apparaissent sans cesse comme des modifications
Cause : Des fins de ligne incohérentes (CRLF ou LF) entre votre système et le dépôt
Configurez .gitattributes avec 'text=auto' et renormalisez tous les fichiers.
git add --renormalize .Des scripts (par ex. git diff-files) signalent des fichiers modifiés alors que le contenu n’a pas changé
Cause : Les horodatages des fichiers ont changé, donc les infos stat en cache dans l’index sont périmées
Rafraîchissez l’index pour mettre à jour les infos stat sans rien indexer. (git status rafraîchit automatiquement.)
git add --refresh .Astuces et pièges
Bonnes pratiques
- ✓Relisez les modifications avant de les indexer : utilisez 'git diff' pour voir ce que vous allez indexer, ou 'git add -p' pour relire de façon interactive.
- ✓Indexez ensemble les modifications liées : regroupez les modifications logiquement liées dans un seul commit. Ne mélangez pas corrections de bugs et nouvelles fonctionnalités.
- ✓Utilisez 'git add -p' pour les grosses modifications : quand vous avez fait plusieurs modifications sans rapport dans un fichier, le mode patch permet de les indexer séparément.
- ✓Consultez souvent git status : lancez toujours 'git status' avant et après l’indexation pour vérifier ce qui sera committé.
- ✓Méfiez-vous de 'git add .' : cela indexe tout le dossier courant. Pensez à nommer les fichiers précisément ou à utiliser 'git add -p' pour plus de contrôle.
- ✓Configurez .gitignore d’abord : avant votre premier 'git add', vérifiez que .gitignore exclut les artefacts de build, les dépendances et les fichiers sensibles.
- ✓Utilisez le dry-run pour vérifier : en cas de doute, 'git add -n .' affiche ce qui serait indexé sans rien indexer.
- ✓Indexez explicitement les suppressions : supprimer un fichier en local n’indexe pas la suppression. Utilisez 'git add -u' ou 'git add -A' pour inclure les suppressions.
Erreurs fréquentes
- ✗'git add .' ou 'git add -A' : les deux indexent les fichiers nouveaux, modifiés et supprimés, mais '.' ne couvre que le dossier courant et ses sous-dossiers, alors que '-A' couvre tout l’arbre de travail.
- ✗Oublier que 'git add' ne committe pas. Les fichiers sont seulement indexés et il faut 'git commit' pour les enregistrer.
- ✗Ajouter des fichiers qui devraient être ignorés. Vérifiez toujours votre .gitignore avant 'git add -A' ou 'git add .'
- ✗Ne pas relire les modifications avant de les indexer. Utilisez 'git add -p' pour relire plus attentivement ce que vous indexez.
- ✗Confondre 'git add -u' et 'git add -A' : '-u' n’indexe que les modifications et suppressions de fichiers suivis, pas les nouveaux fichiers non suivis.
FAQ
Depuis Git 2.0, les deux indexent les fichiers nouveaux, modifiés et supprimés. La différence est la portée : 'git add .' ne couvre que le dossier courant et ses sous-dossiers, alors que 'git add -A' couvre tout le dépôt, quel que soit votre dossier courant.
Le fichier est probablement listé dans .gitignore. Vérifiez avec 'git check-ignore <file>'. Si vous devez quand même l’ajouter, forcez avec 'git add -f <file>'.
Oui ! Utilisez 'git restore --staged <file>' (ou 'git reset HEAD <file>' dans les anciennes versions de Git) pour désindexer un fichier sans perdre vos modifications.
Utilisez 'git add -p <file>' pour entrer dans le mode patch interactif. Git vous montre chaque modification (hunk) et vous laisse choisir lesquelles indexer avec y/n.
Cela vient en général de changements de fins de ligne (CRLF/LF) ou de permissions. Regardez 'git diff' pour voir ce qui a changé. Configurez .gitattributes pour gérer les fins de ligne.
Ajoutez d’abord les fichiers à exclure dans .gitignore, puis utilisez 'git add .'. Sinon, ajoutez les fichiers un par un ou utilisez des motifs comme 'git add *.js'.
Il indique à Git que vous comptez ajouter le fichier plus tard. Le fichier devient suivi (il apparaît dans git diff) mais son contenu n’est pas encore indexé. Pratique pour relire de nouveaux fichiers avant de committer.
Non, Git ne suit que des fichiers, pas des dossiers. L’astuce habituelle est d’ajouter un fichier .gitkeep ou .gitignore dans le dossier vide.