{{tag>dev git index commit}} ====== Gestion de la zone d'index git ====== Un commit est un instantané de la zone d'index ou zone d'assemblage (staging area). La zone d'index est hors du répertoire de travail. Seuls les fichiers et dossiers présents dans la zone d'index seront enregistrés en l’état lors du commit. Worflow: - Modifier les fichiers dans le répertoire de travail - Placer dans l'index les fichiers/dossiers à historiser - Faire le commit Pour illustrer les commandes, un dépôt avec le contenu suivant est créé: /tmp/hello-git.git/ ├── readme.txt └── src ├── A.c ├── B.c └── C.c ===== État de la zone d'index ===== La commande **git status** permet de voir le contenu de la zone d'index, l'option **-s** résume le statut de chaque fichier: $ git status -s ?? readme.txt ?? src/ Les points d'interrogations indique que le répertoire ./src et le fichier ./readme.txt ne sont pas suivis par git pour le moment. ===== Ajouter à l'index ===== L'index ou staging area est un espace d'assemblage permettant de préparer le commit. On sélectionne le travail que l'on souhaite historiser. Ajouter un dossier dans l'index implique l'ajout de tout son contenu: $ git add src/ $ git st A src/A.c A src/B.c A src/C.c ?? readme.tx Ici, le 'A' en préfixe indique que les fichiers contenus dans src sont ajoutés à l'index. Pour n'ajouter à l'index que les fichiers déjà suivis et modifiés dans l'espace de travail: $ git add -u Ajouter à l'index les fichiers non suivis et les fichiers modifiés: $ git add . $ git st A readme.txt A src/A.c A src/B.c A src/C.c ===== Ignorer des fichiers ===== Les fichiers .gitignore permettent de définir des patterns d'exclusion. Lors des appels à la commande git add, le fichier .gitignore est évalué et les fichiers correspondants aux patterns présents ne sont pas ajoutés à l'index. On peut néanmoins forcer l'ajout à l'index avec l'argument **-f** $ git add -f ./build/A.o Il peut y avoir de multiples fichiers .gitignore dans répertoire du projet. Pour tester si un fichier est bien exclus: $ git check-ignore -v build/B.o .gitignore:2:*.o build/B.o Dans cet exemple la commande retourne que le fichier "B.o" est ignoré par la règle de la ligne 2. ===== Retirer des fichier de l'index ===== La commande git reset permet de retirer un fichier de la zone d'index: $ git reset dossier/fichier La commande git reset sans argument ne comporte aucun danger de perte de données. Elle retire le fichier de la zone d'index mais celui-ci reste présent dans la zone de travail. Pour supprimer un fichier on peut également utiliser git rm git rm --cached dossier/fichier Attention a bien utiliser l'option **%%--%%cached** pour ne supprimer que le fichier de la zone d'index. Sans cette option le fichier et les modifications apportées sont supprimés de l'index et de l'espace de travail. ===== Retirer tous les fichiers de l'index ===== Pour retirer tous les fichiers présents dans la zone d'index en conservant le répertoire de travail: # équivalent pleinement qualifié du comportement par défaut $ git reset --mixed # comportement par défaut retirant tous les fichiers/dossiers de la staging area $ git reset ===== Restaurer un fichier ===== Pour annuler les modifications faites sur un fichier du répertoire de travail et le restaurer tel qu'il était lors du dernier commit $ git checkout -- fichier