ressources-ca

Git : Les commits

> Revenir au sommaire Git

Permets d’enregistrer les modifications dans le dépôt.

Connaître les fichiers modifiés récemment non comité ou indexé

git status

Connaître les modifications apportées à un ou plusieurs fichiers

git diff

Il est possible de spécifier un fichier après diff :

git diff fichier1

Ajouter des fichiers à prendre en compte lors du prochain commit (indexé)

Ajouter des fichiers modifiés spécifiques :

git add fichier1 fichier2

Ajouter tous les fichiers modifiés :

git add *

Sauvegarder vos changements indexé (commit)

Commit avec un message de validation

git commit -m "Message court sur les modifications apportées"

Raccourci de git add + git commit

Inclut tous les fichiers listés dans git status :

git commit -a

Indique précisément quels fichiers inclure dans le commit :

git commit fichier1 fichier2

Afficher l’historique des commits (les logs)

Visualiser les différents commits de la branche active.

git log

Options utiles: -p ou –stat

Afficher les logs des 3 derniers commits :

git log -n 3

Afficher les logs d’une branche :

git log nomBranche

Modifier un commit

Modification du dernier commit non push sur le serveur (local)

git commit –amend

Fusionner/regrouper plusieurs commits local

On souhaite squasher nos commits qui se suivent dans l’historique, sur la même branche.

Très utile si un commit à été fait, mais il y a une modification manquante. (ex. fichier manquant, erreur de syntaxe).

On peut cibler les commits avec plusieurs méthodes :

On entre alors en mode interactif (on utilise l’éditeur de git). Les commits sont affichés du plus ancien au plus récent.

Exemple :

pick  fbde9fd   Add Readme.md
pick  70aaed5   Update Readme
pick  ccf2779   Update Readme again
pick  8c706b5   Update Readme again and again

Le premier commit correspond à celui de base, celui que l’on souhaite conserver ; on laisse donc l’instruction pick devant. On souhaite squasher tous les commits suivants, on met donc l’instruction squash devant. (vous pouvez aussi utiliser l’alias s à la place de squash)

On obtient alors :

pick    fbde9fd Add Readme.md
squash  70aaed5 Update Readme
squash  ccf2779 Update Readme again
squash  8c706b5 Update Readme again and again

Concrètement, on dit à GIT de se baser sur le premier commit et on lui applique tous les suivants pour n’en faire qu’un seul.

Lorsque l’on valide le squash (on quitte le mode interactif), Git vas réappliquer les commits dans le même ordre qu’ils aient été configurés juste avant. On met alors un message de commit qui concerne le regroupement de nos commits et c’est tout.

On peut ensuite vérifier toujours à l’aide de la commande git que nos commits ont bien été squashés. Il ne vous reste plus qu’à pousser vos modifications :

git push origin master --force

Note : Pensez à bien utiliser l’option -–force car le rebase doit écraser l’ancien historique des commits. Attention, l’option --force ne doit être utilisée que sur votre propre fork !

Annuler un commit

Annuler le dernier commit

Les fichiers restent modifiés :

git reset HEAD^

Les changements effectués dans les fichiers seront perdus :

git reset –hard HEAD^

Annuler un commit publié

git revert idDuCommit

Restaurer un commit

Restaurer un fichier à son état lors du dernier commit

git checkout fichierName

Ajouter un tag

Répertorier les tags

git tag

Créer un tag

git tag nomTag

Créer un tag annoté

git tag -a nomTag

Tagger un commit

git tag nomTag idCommit

Partager les tags vers le dépôt distant

git push origin nomTag

Consulter l’état d’un dépôt à un tag donné

git checkout nomTag

Supprimer un tag

git tag -d nomTag

Convention de nommage

Sauvegarder un dossier vide

Par défaut un dossier vide ne peut être versionné. Pour remédier à cela, il existe une convention de nommage d’un fichier temporaire nommé “.gitkeet” que l’on ajoute au dossier pour le versionner.

Ignorer des fichiers ou dossiers spécifiques

Pour ignorer des fichiers ou dossiers du versionning afin de ne pas sauvegarder par exemple des fichiers temporaires.

On créer un fichier “.gitignore” :

*.log
cache/*
!/cache/.gitkeep

Dans l’exemple ci-dessus on exclut les fichiers avec l’extension .log, tous les fichiers inclus dans le dossier cache/ sauf le fichier .gitkeep.

Ressources complémentaires