Affichage de l'historique des commits Git

L'affichage de l'historique des commits Git vous aide à comprendre les modifications du code et l'avancement du développement.

Git fournit plusieurs commandes et options pour afficher l'historique des commits, des simples journaux aux diffs détaillés.

L'historique des commits Git utilise généralement deux commandes courantes :

  • git log- Afficher les enregistrements historiques des commits.
  • git blame <file>- Afficher les enregistrements de modifications historiques du fichier spécifié sous forme de liste.

git log

Après avoir effectué un certain nombre de commits dans Git, ou après avoir cloné un projet, si vous souhaitez consulter l'historique des commits, nous pouvons utilisergit logpour l'afficher avec la commande.

git logLa commande est utilisée pour afficher l'historique des commits dans le dépôt Git.

git logElle affiche toutes les informations de commit, du commit le plus récent au plus ancien, y compris le hash de commit, l'auteur, la date de commit et le message de commit, etc.

git logLa syntaxe de base de la commande est :

git log [选项] [分支名/提交哈希]

Les options courantes incluent :

  • -p: Afficher le patch du commit (modifications spécifiques).
  • --oneline: Afficher les informations de commit dans un format concis sur une seule ligne.
  • --graph: Afficher l'historique des branches et des fusions de manière graphique.
  • --decorate: Afficher les commits pointés par les branches et les tags.
  • --author=<作者>: Afficher uniquement les commits d'un auteur spécifique.
  • --since=<时间>: Afficher uniquement les commits postérieurs à une date spécifiée.
  • --until=<时间>: Afficher uniquement les commits antérieurs à une date spécifiée.
  • --grep=<模式>: Afficher uniquement les messages de commit contenant le motif spécifié.
  • --no-merges: Ne pas afficher les commits de fusion.
  • --stat: Afficher des statistiques brèves, incluant les fichiers modifiés et le nombre de lignes.
  • --abbrev-commit: Utiliser des valeurs de hash de commit courtes.
  • --pretty=<格式>: Utiliser un format personnalisé pour afficher les informations de commit.

Pour les opérations de notre chapitre précédent, utilisez la commandegit logpour lister les enregistrements historiques de commit comme suit :

$ git log
commit d5e9fc2c811e0ca2b2d28506ef7dc14171a207d9 (HEAD -> master)
Merge: c68142b 7774248
Author: example <[email protected]>
Date:   Fri May 3 15:55:58 2019 +0800

    Merge branch 'change_site'

commit c68142b562c260c3071754623b08e2657b4c6d5b
Author: example <[email protected]>
Date:   Fri May 3 15:52:12 2019 +0800

    修改代码

commit 777424832e714cf65d3be79b50a4717aea51ab69 (change_site)
Author: example <[email protected]>
Date:   Fri May 3 15:49:26 2019 +0800

    changed the example.php

commit c1501a244676ff55e7cccac1ecac0e18cbf6cb00
Author: example <[email protected]>
Date:   Fri May 3 15:35:32 2019 +0800

Nous pouvons utiliser l'option --oneline pour afficher une version concise de l'historique.

$ git log --oneline
$ git log --oneline
d5e9fc2 (HEAD -> master) Merge branch 'change_site'
c68142b 修改代码
7774248 (change_site) changed the example.php
c1501a2 removed test.txt、add example.php
3e92c19 add test.txt
3b58100 第一次版本提交

Cela nous indique l'historique de développement de ce projet.

Nous pouvons également utiliser l'option --graph pour voir quand les branches et les fusions sont apparues dans l'historique. Voici la même commande avec l'option de graphe de topologie activée :

*   d5e9fc2 (HEAD -> master) Merge branch 'change_site'
|\  
| * 7774248 (change_site) changed the example.php
* | c68142b 修改代码
|/  
* c1501a2 removed test.txt、add example.php
* 3e92c19 add test.txt
* 3b58100 第一次版本提交

Nous pouvons maintenant voir plus clairement quand le travail a divergé et quand il a fusionné à nouveau.

Vous pouvez également utiliser le paramètre--reversepour afficher tous les journaux dans l'ordre inverse.

$ git log --reverse --oneline
3b58100 第一次版本提交
3e92c19 add test.txt
c1501a2 removed test.txt、add example.php
7774248 (change_site) changed the example.php
c68142b 修改代码
d5e9fc2 (HEAD -> master) Merge branch 'change_site'

Si vous voulez seulement trouver le journal des commits d'un utilisateur spécifique, vous pouvez utiliser la commande : git log --author. Par exemple, disons que nous voulons trouver la partie commitée par Linus dans le code source de Git :

$ git log --author=Linus --oneline -5
81b50f3 Move 'builtin-*' into a 'builtin/' subdirectory
3bb7256 make "index-pack" a built-in
377d027 make "git pack-redundant" a built-in
b532581 make "git unpack-file" a built-in
112dd51 make "mktag" a built-in

Si vous devez spécifier une date, vous pouvez utiliser plusieurs options : --since et --before, mais vous pouvez aussi utiliser --until et --after.

Par exemple, si je veux voir tous les commits du projet Git depuis trois semaines et après le 18 avril, je peux exécuter ceci (j'ai aussi utilisé l'option --no-merges pour masquer les commits de fusion) :

$ git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges
5469e2d Git 1.7.1-rc2
d43427d Documentation/remote-helpers: Fix typos and improve language
272a36b Fixup: Second argument may be any arbitrary string
b6c8d2d Documentation/remote-helpers: Add invocation section
5ce4f4e Documentation/urls: Rewrite to accomodate transport::address
00b84e9 Documentation/remote-helpers: Rewrite description
03aa87e Documentation: Describe other situations where -z affects git diff
77bc694 rebase-interactive: silence warning when no commits rewritten
636db2c t3301: add tests to use --format="%N"

Options courantes

Limiter le nombre de commits affichés :

git log -n <number>

Par exemple, afficher les 5 derniers commits :

git log -n 5

Afficher les commits après la date spécifiée :

git log --since="2024-01-01"

Afficher les commits avant la date spécifiée :

git log --until="2024-07-01"

Afficher uniquement les commits d'un auteur spécifique :

git log --author="Author Name"

Plusgit logLa commande peut afficherhttp://git-scm.com/docs/git-logOu utilisezgit log --helpCommande pour afficher les informations d'aide.


git blame

git blameLa commande est utilisée pour afficher, ligne par ligne, qui a introduit ou modifié chaque ligne de code dans le fichier spécifié et quand.

git blameIl peut suivre l'historique des modifications de chaque ligne du fichier, y compris des informations telles que l'auteur, le hash du commit, la date du commit et le message de commit.

Si vous souhaitez consulter l'historique des modifications d'un fichier spécifié, vous pouvez utiliser la commande git blame, avec le format suivant :

git blame [选项] <文件路径>

Les options courantes incluent :

  • -L <起始行号>,<结束行号>: Afficher uniquement les annotations de code dans la plage de lignes spécifiée.
  • -C: Pour les lignes de code renommées ou copiées, tracer également l'origine de la ligne de code.
  • -M: Pour les lignes de code déplacées, tracer également l'origine de la ligne de code.
  • -C -Cou-M -M: Pour les lignes de code ayant subi des modifications importantes, effectuer un traçage plus approfondi.
  • --show-stats: Afficher les statistiques du nombre de lignes pour chaque auteur.

: Afficher les annotations de code et les informations associées pour chaque ligne d'un fichier :

git blame <文件路径>

Afficher uniquement les annotations de code dans la plage de lignes spécifiée :

git blame -L <起始行号>,<结束行号> <文件路径>

Tracer l'origine des lignes de code renommées ou copiées :

git blame -C <文件路径>

: Tracer l'origine des lignes de code déplacées :

git blame -M <文件路径>

: Afficher les statistiques du nombre de lignes :

git blame --show-stats <文件路径>

La commande git blame affiche les enregistrements de modification dans une liste, comme dans l'exemple suivant :

$ git blame README 
^d2097aa (tianqixin 2020-08-25 14:59:25 +0800 1) # Example Git 测试
db9315b0 (example    2020-08-25 16:00:23 +0800 2) # Example 

Pour plus de contenu, vous pouvez utilisergit blame --helpConsultez la documentation d'aide complète pour en savoir plus sur les options et l'utilisation.


Récupération et retour arrière

Git propose plusieurs façons de restaurer et de revenir à des versions précédentes ; différentes commandes conviennent à différents scénarios et besoins.

Voici plusieurs méthodes courantes :

  • git checkout: Changer de branche ou restaurer des fichiers à un commit spécifié.
  • git reset: Réinitialiser la branche actuelle au commit spécifié (réinitialisation douce, mixte, dure).
  • git revert: Créer un nouveau commit pour annuler le commit spécifié sans modifier l'historique des commits.
  • git reflog: Consulter l'historique des opérations et récupérer les commits perdus.

1. git checkout : Extraire une version spécifique d'un fichier

La commande git checkout est utilisée pour changer de branche ou restaurer les fichiers du répertoire de travail vers un commit spécifié.

Restaurer les fichiers du répertoire de travail vers un commit spécifique :

git checkout <commit> -- <filename>

Par exemple, restaurer file.txt vers la version du commit abc123 :

git checkout abc123 -- file.txt

Basculer vers un commit spécifique :

git checkout <commit>

Par exemple :

git checkout abc123

Lorsque vous basculez vers un commit spécifique de cette manière, vous êtes dans un état HEAD détaché.

2. git reset : Réinitialiser la branche courante à un commit spécifique

La commande git reset peut modifier l'historique des commits de la branche courante. Elle possède trois modes principaux : --soft, --mixed et --hard.

--soft: Réinitialiser uniquement HEAD au commit spécifié, en laissant la zone de préparation et le répertoire de travail inchangés.

git reset --soft <commit>

--mixed (par défaut): Réinitialiser HEAD au commit spécifié, réinitialiser la zone de préparation, mais conserver le répertoire de travail inchangé.

git reset --mixed <commit>

--hard: Réinitialiser HEAD au commit spécifié, en réinitialisant à la fois la zone de préparation et le répertoire de travail.

git reset --hard <commit>

Par exemple, réinitialiser la branche courante au commit abc123 :

git reset --hard abc123

3. git revert : annuler un commit

La commande git revert crée un nouveau commit pour annuler le commit spécifié. Elle ne modifie pas l'historique des commits et convient aux commits qui ont déjà été poussés vers un dépôt distant.

git revert <commit>

Par exemple, annuler le commit abc123 :

git revert abc123

4. git reflog : consulter l'historique des opérations

La commande git reflog enregistre tous les déplacements de HEAD. Même si des commits sont supprimés ou réinitialisés, ils peuvent être récupérés via reflog.

git reflog

Vous pouvez utiliser reflog pour trouver un hash de commit précédent et restaurer un état spécifique. Par exemple :

git reset --hard HEAD@{3}

Exemple

Voici un exemple complet montrant comment utiliser ces commandes pour récupérer des versions historiques :

Afficher l'historique des commits :

git log --oneline

Supposons que la sortie soit la suivante :

abc1234 Commit 1
def5678 Commit 2
ghi9012 Commit 3

Passer au commit 2 (dans un état HEAD détaché) :

git checkout def5678

Réinitialiser vers le commit 2, en conservant les modifications dans la zone de préparation :

git reset --soft def5678

Réinitialiser vers le commit 2, en retirant les modifications de la zone de préparation :

git reset --mixed def5678

Réinitialiser sur le commit 2, en abandonnant toutes les modifications :

git reset --hard def5678

Annuler le commit 2 :

git revert def5678

Afficher le reflog pour récupérer les commits perdus :

git reflog

Trouver le hash du commit précédent et restaurer :

git reset --hard HEAD@{3}
autres extensions