FAQ Git : retrouvez les meilleures réponses à vos questions pour apprendre Git, de niveau débutant à expertConsultez toutes les FAQ

Nombre d'auteurs : 6, nombre de questions : 110, dernière mise à jour : 26 juin 2019 

 
OuvrirSommaireLes commits

Un commit est une révision du code source. Il est identifié par une empreinte numérique générée par une fonction de hachage (algorithme SHA-1).

Un commit est composé de métadonnées et du contenu (le code source) à versionner.

Les métadonnées sont :

  • le message du commit ;
  • le committer (l’utilisateur qui a créé le commit) ;
  • la date de création du commit (au format RFC2822 par défaut, par exemple : Tue Oct 9 00:58:43 2018 +0200) ;
  • l’auteur (l’utilisateur qui a créé le contenu du commit) ;
  • la date de création du contenu (au format RFC2822) ;
  • l’identifiant (SHA-1 donc) du commit parent (avec deux exceptions : si vous créez le premier commit du dépôt, alors il n’y a pas de parents et s’il s’agit d’un commit de merge alors il en a deux).

Sans entrer dans les détails internes du fonctionnement de Git, retenez simplement que par « contenu » on entend à la fois les modifications ajoutées à l’index (staging area) et également les fichiers et répertoires non modifiés.

L’empreinte numérique est appliquée sur les métadonnées et le contenu.

Ainsi, un commit bénéficie des propriétés des empreintes numériques :

  • c’est rapide ;
  • deux commits différents ne peuvent pas avoir le même identifiant ;
  • il n’est pas possible de modifier les métadonnées ou le contenu d’un commit sans modifier son identifiant.

Pour plus de détails, on peut se référer à la documentation officielle ou à un tutoriel sur developpez.com.

Mis à jour le 8 mars 2019  par Marc Loupias

Il est nécessaire d’avoir au préalable ajouté des fichiers à l’index (staging area).

 
Sélectionnez
1.
git commit

Utilisée seule, cette commande permet d’ouvrir l’éditeur de texte de votre ligne de commande (vim sous macOS et sous Windows via Git BASH, nano sous Ubuntu par exemple) afin d’y saisir le message de commit.

Si aucun fichier n’a été ajouté à l’index, il est possible de passer l’option -a qui demande à Git de prendre tous les fichiers modifiés présents dans le répertoire de travail (working directory).

Une utilisation courante des options est : git commit -am "message de commit" ce qui permet de prendre toutes les modifications en cours et d’ajouter un message de commit dans le même temps.

Mis à jour le 8 mars 2019  par Marc Loupias

L’option -m permet d’ajouter un message.

Par exemple :

 
Sélectionnez
1.
git commit -m "message de commit"
Mis à jour le 8 mars 2019  par Marc Loupias
 
Sélectionnez
1.
git commit --amend -m "nouveau message de commit"

Comme expliqué dans la première question, ceci a pour effet de modifier le SHA-1 du commit.

Mis à jour le 8 mars 2019  par Marc Loupias
 
Sélectionnez
1.
git reset --soft HEAD^

Les modifications qui étaient présentes dans le commit supprimé sont encore présente dans l’index.

Mis à jour le 8 mars 2019  par Marc Loupias
 
Sélectionnez
1.
git reset --hard HEAD^

Les modifications qui étaient présentes dans le commit supprimé sont supprimées.

Mis à jour le 8 mars 2019  par Marc Loupias
 
Sélectionnez
1.
git reset --soft HEAD~3

Les trois derniers commits sont supprimés. Les modifications des trois derniers commits sont présentes dans l’index.

Mis à jour le 8 mars 2019  par Marc Loupias
 
Sélectionnez
1.
git reset --hard HEAD~3

Les trois derniers commits sont supprimés et les modifications qu’ils comportaient le sont avec.

Mis à jour le 8 mars 2019  par Marc Loupias

Vous devez avoir effectué un checkout de la branche de destination, puis vous exécutez un cherry-pick en lui passant en paramètre le hash du commit désiré.

Par exemple, pour ajouter le commit 1234abcd à la branche master :

 
Sélectionnez
1.
2.
git checkout master
git cherry-pick 1234abcd
Mis à jour le 8 mars 2019  par Marc Loupias

L’astuce consiste à ajouter le dépôt source en tant que remote du dépôt courant et à faire un fetch (et seulement fetch) de ses branches.

Par exemple, pour ajouter à master le commit 1234abcd existant sur le dépôt boubou de l’utilisateur toto, la marche à suivre est la suivante :

 
Sélectionnez
1.
2.
3.
4.
git remote add boubou git://github.com/toto/boubou.git
git fetch boubou
git checkout master
git cherry-pick 1234abcd
Mis à jour le 8 mars 2019  par Marc Loupias

Une pratique essentielle est de ne jamais réécrire ou supprimer un historique qui a été publié et qui a donc pu être récupéré par un autre utilisateur.

Le revert ne supprime rien, il crée un nouveau commit qui est un miroir inverse du commit source.

 
Sélectionnez
1.
git revert 1234abcd

Cette commande ajoute à la branche courante un nouveau commit qui sera l’exact inverse du commit 1234abcd. C’est la seule bonne manière d’annuler un commit existant qui a été publié.

Mis à jour le 8 mars 2019  par Marc Loupias
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2019 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.