Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
-
2.52.0
2025-11-17
- 2.51.1 â 2.51.2 no changes
-
2.51.0
2025-08-18
- 2.50.1 no changes
-
2.50.0
2025-06-16
- 2.44.1 â 2.49.1 no changes
-
2.44.0
2024-02-23
- 2.43.1 â 2.43.7 no changes
-
2.43.0
2023-11-20
- 2.41.1 â 2.42.4 no changes
-
2.41.0
2023-06-01
- 2.38.1 â 2.40.4 no changes
-
2.38.0
2022-10-02
- 2.34.1 â 2.37.7 no changes
-
2.34.0
2021-11-15
- 2.31.1 â 2.33.8 no changes
- 2.31.0 no changes
- 2.30.1 â 2.30.9 no changes
-
2.30.0
2020-12-27
- 2.29.1 â 2.29.3 no changes
-
2.29.0
2020-10-19
- 2.23.1 â 2.28.1 no changes
-
2.23.0
2019-08-16
- 2.16.6 â 2.22.5 no changes
- 2.15.4 no changes
- 2.13.7 â 2.14.6 no changes
-
2.12.5
2017-09-22
-
2.11.4
2017-09-22
- 2.9.5 â 2.10.5 no changes
-
2.8.6
2017-07-30
-
2.7.6
2017-07-30
- 2.6.7 no changes
-
2.5.6
2017-05-05
-
2.4.12
2017-05-05
-
2.3.10
2015-09-28
- 2.1.4 â 2.2.3 no changes
-
2.0.5
2014-12-17
NOM
git-blame - Montrer la rĂ©vision et lâauteur qui ont modifiĂ© en dernier chaque ligne dâun fichier
SYNOPSIS
git blame [-c] [-b] [-l] [--root] [-t] [-f] [-n] [-s] [-e] [-p] [-w] [--incremental] [-L <plage>] [-S <fichier-de-révs>] [-M] [-C] [-C] [-C] [--since=<date>] [--ignore-rev <rév>] [--ignore-revs-file <fichier>] [--color-lines] [--color-by-age] [--progress] [--abbrev=<n>] [--contents <fichier>] [<rév> | --reverse <rév>..<rév>][--] <fichier>
DESCRIPTION
Annote chaque ligne du fichier donné avec les informations de la derniÚre révision qui a modifié la ligne. Optionnellement, commence à annoter à partir de la révision donnée.
Lorsquâil est spĂ©cifiĂ© une ou plusieurs fois, -L limite lâannotation aux lignes demandĂ©es.
Lâorigine des lignes est automatiquement suivie Ă travers les renommages de fichiers entiers (il nây a actuellement aucune option pour dĂ©sactiver le suivi des renommages). Pour suivre les lignes dĂ©placĂ©es dâun fichier Ă un autre, ou pour suivre les lignes qui ont Ă©tĂ© copiĂ©es et collĂ©es depuis un autre fichier, etc., voir les options -C et -M.
Le rapport ne vous dit rien sur les lignes qui ont Ă©tĂ© supprimĂ©es ou remplacĂ©es ; vous devez utiliser un outil tel que "git diff" ou lâinterface "pickaxe" briĂšvement mentionnĂ©e dans le paragraphe suivant.
Outre la prise en charge de lâannotation des fichiers, Git permet Ă©galement de rechercher dans lâhistorique du dĂ©veloppement la modification oĂč un extrait de code est apparu. Il est ainsi possible de savoir quand un extrait de code a Ă©tĂ© ajoutĂ© Ă un fichier, dĂ©placĂ© ou copiĂ© entre des fichiers, ou supprimĂ© ou remplacĂ©. Il fonctionne en recherchant une chaĂźne de texte dans le diff. Un petit exemple de lâinterface pickaxe qui recherche blame_usage :
$ git log --pretty=oneline -S'blame_usage' 5040f17eba15504bad66b14a645bddd9b015ebb7 blame -S <fichier-d-ancĂȘtre> ea4c7f9bf69e781dd0cd88d2bccb2bf5cc15c9a7 git-blame: Make the output
OPTIONS
- -b
-
Afficher un SHA-1 vierge pour les validations de limite. Cela peut Ă©galement ĂȘtre contrĂŽlĂ© par lâoption de configuration
blame.blankBoundary. - --root
-
Ne pas considĂ©rer les commits de base comme des limites. Ceci peut Ă©galement ĂȘtre contrĂŽlĂ© via lâoption de configuration
blame.showRoot. - --show-stats
-
Inclure des statistiques supplémentaires à la fin de la sortie de blame.
- -L <début>,<fin>
- -L: <nomfonc>
-
Nâannoter que la plage de lignes donnĂ©e par <dĂ©but>,<fin> ou par la regex du nom de la fonction <nom-de-fonction>. Peut ĂȘtre spĂ©cifiĂ© plusieurs fois. Les intervalles qui se chevauchent sont autorisĂ©s.
<début> et <fin> sont facultatifs.
-L<dĂ©but> ou-L<dĂ©but>,, sâĂ©tend de <dĂ©but> jusquâĂ la fin du fichier.-L,<fin> sâĂ©tend du dĂ©but du fichier jusquâĂ <fin>.<dĂ©but> et <fin> peuvent prendre lâune de ces formes :
-
<nombre>
Si <début> ou <fin> est un nombre, il spécifie un numéro de ligne absolu (les lignes comptent à partir de 1).
-
/<regex>/Cette forme utilisera la premiÚre ligne correspondant à la regex POSIX donnée. Si <début> est une regex, la recherche se fera à partir de la fin de la plage
-Lprécédente, le cas échéant, sinon à partir du début du fichier. Si <début> est^/<regex>/, la recherche se fera à partir du début du fichier. Si <fin> est une regex, la recherche débutera à partir de la ligne donnée par <début>. -
+<offset> ou-<offset>Ceci nâest valable que pour <fin> et spĂ©cifiera un nombre de lignes avant ou aprĂšs la ligne donnĂ©e par <dĂ©but>.
Si
:<nom-de-fonction> est donnĂ© Ă la place de <dĂ©but> et de <fin>, il sâagit dâune expression rĂ©guliĂšre qui indique la plage depuis premiĂšre ligne qui correspond Ă <nom-de-fonction>, jusquâĂ la ligne de nom-de-fonction suivante. La recherche de:<nom-de-fonction> se fait Ă partir de la fin de la plage-LprĂ©cĂ©dente, sâil y en a une, sinon Ă partir du dĂ©but du fichier. La recherche de^:<nom-de-fonction> commence au dĂ©but du fichier. Les noms de fonction sont dĂ©terminĂ©s de la mĂȘme maniĂšre que celle par laquellegitdifffonctionne sur les en-tĂȘtes de section de rustine (voir DĂ©finir un en-tĂȘte personnalisĂ© dans gitattributes[5]). -
- -l
-
Afficher la révision long (par défaut : désactivé).
- -t
-
Afficher les horodatages bruts (Défaut : désactivé).
- -S <fichier-des-révs>
-
Utiliser les rĂ©visions depuis le fichier-des-rĂ©visions au lieu dâappeler git-rev-list[1].
- --reverse <rév>..<rév>
-
Parcourir lâhistorique en avant au lieu dâen arriĂšre. Au lieu de montrer la rĂ©vision dans laquelle une ligne est apparue, ceci montre la derniĂšre rĂ©vision dans laquelle une ligne a existĂ©. Cela nĂ©cessite une gamme de rĂ©visions comme DĂBUT..FIN oĂč le chemin de blĂąme existe dans DĂBUT. Pour plus de commoditĂ©, git blame --reverse DĂBUT est pris comme git blame --reverse DĂBUT..HEAD.
- --first-parent
-
Ne suivre que le premier commit parent lors de la rencontre dâun commit de fusion. Cette option peut ĂȘtre utilisĂ©e pour dĂ©terminer le moment oĂč une ligne a Ă©tĂ© introduite dans une branche dâintĂ©gration particuliĂšre, plutĂŽt que le moment oĂč elle a Ă©tĂ© introduite dans lâhistorique global.
- -p
- --porcelain
-
Afficher dans un format propice Ă la consommation par machine.
- --line-porcelain
-
Afficher le format porcelaine, mais sortir les informations de commit pour chaque ligne, et pas seulement la premiĂšre fois quâun commit est rĂ©fĂ©rencĂ©. Implique --porcelaine.
- --incremental
-
Afficher le résultat progressivement dans un format conçu pour la consommation par une machine.
- --encoding=<codage>
-
SpĂ©cifier lâencodage utilisĂ© pour produire les des noms dâauteurs et les rĂ©sumĂ©s des commits. Le dĂ©finir sur
nonerend la sortie de blĂąme des donnĂ©es non converties. Pour plus dâinformations, voir la discussion sur lâencodage dans la page manuelle git-log[1]. - --contents <fichier>
-
Annoter en utilisant le contenu du fichier nommĂ©, en commençant par <rĂ©v> si elle est spĂ©cifiĂ©e, et HEAD sinon. Vous pouvez spĂ©cifier - pour que la commande lise le contenu du fichier Ă partir de lâentrĂ©e standard.
- --date <format>
-
SpĂ©cifie le format utilisĂ© pour les dates sur la sortie. Si --date nâest pas fourni, la valeur de la variable de configuration blame.date est utilisĂ©e. Si la variable de configuration blame.date nâest pas non plus dĂ©finie, le format iso est utilisĂ©. Pour les valeurs prises en charge, voir la discussion de lâoption --date Ă git-log[1].
- --[no-]progress
-
LâĂ©tat dâavancement est indiquĂ© par dĂ©faut sur le flux dâerreurs standard lorsquâil est connectĂ© Ă un terminal. Ce drapeau permet de signaler lâĂ©tat dâavancement mĂȘme sâil nâest pas attachĂ© Ă un terminal. On ne peut pas utiliser
--progressavec--porcelainou--incremental. - -M[<num>]
-
DĂ©tecter les lignes dĂ©placĂ©es ou copiĂ©es dans un fichier. Lorsquâun commit dĂ©place ou copie un bloc de lignes (par exemple, le fichier original a A puis B, et le commit le change en B puis A), lâalgorithme traditionnel de blame ne remarque que la moitiĂ© du mouvement et blĂąme gĂ©nĂ©ralement les lignes qui ont Ă©tĂ© dĂ©placĂ©es vers le haut (câest-Ă -dire B) au parent et attribue le blĂąme aux lignes qui ont Ă©tĂ© dĂ©placĂ©es vers le bas (câest-Ă -dire A) au commit enfant. Avec cette option, les deux groupes de lignes sont blĂąmĂ©s sur le parent en effectuant des passes dâinspection supplĂ©mentaires.
<num>est facultatif, mais câest la limite infĂ©rieure sur le nombre de caractĂšres alphanumĂ©riques que Git doit dĂ©tecter comme dĂ©placĂ©es/copiĂ©es dans un fichier pour quâil associe ces lignes avec le commit parent. La valeur par dĂ©faut est 20.
- -C[<num>]
-
En plus de
-M, dĂ©tecter les lignes dĂ©placĂ©es ou copiĂ©es Ă partir dâautres fichiers qui ont Ă©tĂ© modifiĂ©s dans le mĂȘme commit. Ceci est utile lorsque vous rĂ©organisez votre programme et que vous dĂ©placez du code dâun fichier Ă lâautre. Lorsque cette option est donnĂ©e deux fois, la commande recherche en plus les copies depuis dâautres fichiers dans le commit qui crĂ©e le fichier. Lorsque cette option est donnĂ©e trois fois, la commande recherche Ă©galement des copies dâautres fichiers dans nâimporte quel commit.<num> est optionnel mais câest la limite infĂ©rieure du nombre de caractĂšres alphanumĂ©riques que Git doit dĂ©tecter comme Ă©tant des dĂ©placements/copies entre fichiers pour quâil puisse associer ces lignes au commit parent. Et la valeur par dĂ©faut est 40. Sâil y a plus dâune option
-CdonnĂ©e, lâargument <num> du dernier-Cprendra effet. - --ignore-rev <rĂ©v>
-
Ignorer les modifications apportĂ©es par la rĂ©vision lors de lâattribution de la responsabilitĂ©, comme si la modification ne sâĂ©tait jamais produite. Les lignes qui ont Ă©tĂ© modifiĂ©es ou ajoutĂ©es par un commit ignorĂ© seront blĂąmĂ©es sur le commit prĂ©cĂ©dent qui a modifiĂ© cette ligne ou les lignes voisines. Cette option peut ĂȘtre spĂ©cifiĂ©e plusieurs fois pour ignorer plus dâune rĂ©vision. Si lâoption de configuration
blame.markIgnoredLinesest activĂ©e, alors les lignes qui ont Ă©tĂ© modifiĂ©es par un commit ignorĂ© et attribuĂ©es Ă un autre commit seront marquĂ©es avec un ? dans la sortie de blame. Si lâoption de configurationblame.markUnblamableLinesest dĂ©finie, alors les lignes touchĂ©es par un commit ignorĂ© que nous nâavons pas pu attribuer Ă une autre rĂ©vision sont marquĂ©es dâun *. Dans les modes porcelaine, ignored et unblamable sont respectivement affichĂ©s. - --ignore-revs-file <fichier>
-
Ignorer les révisions listées dans le
fichier, qui doit ĂȘtre au mĂȘme format quâunfsck.skipList. Cette option peut ĂȘtre rĂ©pĂ©tĂ©e, et ces fichiers seront traitĂ©s aprĂšs tous les fichiers spĂ©cifiĂ©s avec lâoption de configurationblame.ignoreRevsFile. Un nom de fichier vide,"", effacera la liste des rĂ©visions des fichiers prĂ©cĂ©demment traitĂ©s. - --color-lines
-
Colorier diffĂ©remment les annotations de ligne dans le format par dĂ©faut si elles proviennent du mĂȘme commit que la ligne prĂ©cĂ©dente. Cela permet de distinguer plus facilement les blocs de code introduits par des commits diffĂ©rents. La couleur par dĂ©faut est le cyan et peut ĂȘtre ajustĂ©e en utilisant lâoption de configuration
color.blame.repeatedLines. - --color-by-age
-
Colorer les annotations de ligne en fonction de lâĂąge de la ligne dans le format par dĂ©faut. Lâoption de configuration
color.blame.highlightRecentcontrĂŽle quelle couleur est utilisĂ©e pour chaque tranche dâĂąge. - -h
-
Afficher le message dâaide.
- -c
-
Utiliser le mĂȘme mode de sortie que git-annotate[1] (DĂ©faut : dĂ©sactivĂ©).
- --score-debug
-
Inclure les informations de débogage relatives au déplacement des lignes entre les fichiers (voir
-C) et aux lignes dĂ©placĂ©es Ă lâintĂ©rieur dâun fichier (voir-M). Le premier nombre listĂ© est le score. Câest le nombre de caractĂšres alphanumĂ©riques dĂ©tectĂ©s comme ayant Ă©tĂ© dĂ©placĂ©s entre ou dans des fichiers. Il doit ĂȘtre supĂ©rieur Ă un certain seuil pour que git blame considĂšre que ces lignes de code ont Ă©tĂ© dĂ©placĂ©es. - -f
- --show-name
-
Afficher le nom de fichier dans le commit original. Par dĂ©faut, le nom du fichier est affichĂ© sâil y a une ligne qui provient dâun fichier avec un nom diffĂ©rent, Ă cause de la dĂ©tection des renommages.
- -n
- --show-number
-
Afficher le numéro de ligne dans le commit original (Défaut : off).
- -s
-
Supprimer le nom de lâauteur et lâhorodatage dans la sortie.
- -e
- --show-email
-
Montrer lâemail de lâauteur au lieu du nom de lâauteur (DefaultâŻ: off). Ceci peut aussi ĂȘtre contrĂŽlĂ© par lâoption de configuration
blame.showEmail. - -w
-
Ignorer les espaces blancs lors de la comparaison de la version du parent et celle de lâenfant pour trouver dâoĂč viennent les lignes.
- --abbrev=<n>
-
Au lieu dâutiliser les 7 +1 chiffres hexadĂ©cimaux par dĂ©faut comme nom dâobjet abrĂ©gĂ©, utiliser <m>+1 chiffres, oĂč <m> est au moins <n> mais garantir que les noms dâobjet de commit sont uniques. Notez quâune colonne est utilisĂ©e pour un signe dâinsertion pour marquer le commit limite.
LE FORMAT PAR DĂFAUT
Lorsque ni lâoption --porcelain ni lâoption --incremental ne sont spĂ©cifiĂ©es, git blame sortira une annotation pour chaque ligne avec :
-
nom dâobjet abrĂ©gĂ© pour le commit dâoĂč provient la ligne ;
-
lâidentifiant de lâauteur (par dĂ©faut, le nom de lâauteur et la date, sauf si
-sou-eest spécifié) ; et -
numéro de ligne
avant le contenu de la ligne.
LE FORMAT PORCELAINE
Dans ce format, chaque ligne est sortie aprĂšs un en-tĂȘte ; lâen-tĂȘte au minimum a la premiĂšre ligne qui a :
-
SHA-1 de 40 octets du commit auquel la ligne est attribuée ;
-
le numĂ©ro de la ligne dans le fichier dâorigine ;
-
le numéro de la ligne dans le fichier final ;
-
sur une ligne qui commence un groupe de lignes dâun commit diffĂ©rent du prĂ©cĂ©dent, le nombre de lignes dans ce groupe. Sur les lignes suivantes, ce champ est absent.
Cette ligne dâen-tĂȘte est suivie par les informations suivantes au moins une fois pour chaque commit :
-
le nom de lâauteur ("author"), le courriel ("author-mail"), lâheure ("author-time"), et le fuseau horaire ("author-tz") ; de mĂȘme pour le validateur.
-
le nom du fichier dans le commit auquel la ligne est attribuée.
-
la premiĂšre ligne du message de validation ("summary").
Le contenu de la ligne actuelle est affichĂ© aprĂšs lâen-tĂȘte ci-dessus, prĂ©fixĂ© par un TAB. Cela permet dâajouter ultĂ©rieurement dâautres Ă©lĂ©ments dâen-tĂȘte.
Le format porcelaine supprime gĂ©nĂ©ralement les informations de commit qui ont dĂ©jĂ Ă©tĂ© vues. Par exemple, deux lignes qui sont liĂ©es au mĂȘme commit seront toutes deux affichĂ©es, mais les dĂ©tails de ce commit ne seront affichĂ©s quâune seule fois. Les informations spĂ©cifiques aux lignes individuelles ne seront pas regroupĂ©es, comme les rĂ©visions qui seront marquĂ©es « ignored » ou « unblamable ». Ceci est plus efficace, mais peut nĂ©cessiter de conserver plus dâinformation de contexte. Câest plus efficace, mais peut nĂ©cessiter que le lecteur conserve plus dâinformation en tĂȘte. Lâoption --line-porcelain peut ĂȘtre utilisĂ©e pour afficher toutes les informations de commit pour chaque ligne, permettant une utilisation plus simple (mais moins efficace) comme :
# compter le nombre de lignes attribuées à chaque auteur git blame --line-porcelain file | sed -n 's/^author //p' | sort | uniq -c | sort -rn
SPĂCIFICATION DE PLAGES
Contrairement Ă git blame et git annotate dans les anciennes versions de git, lâĂ©tendue de lâannotation peut ĂȘtre limitĂ©e Ă la fois Ă des plages de lignes et Ă des plages de rĂ©visions. Lâoption -L, qui limite lâannotation Ă une plage de lignes, peut ĂȘtre spĂ©cifiĂ©e plusieurs fois.
Lorsque vous souhaitez trouver lâorigine des lignes 40-60 du fichier foo, vous pouvez utiliser lâoption -L comme suit (elles signifient la mĂȘme choseâââtoutes deux demandent 21 lignes Ă partir de la ligne 40) :
git blame -L 40,60 foo git blame -L 40,+21 foo
Vous pouvez également utiliser une expression réguliÚre pour spécifier la plage de lignes :
git blame -L '/^sub hello {/,/^}$/' foo
qui limite lâannotation au corps de la sous-routine hello.
Lorsque vous nâĂȘtes pas intĂ©ressĂ© par les changements plus anciens que la version v2.6.18, ou les changements plus anciens que 3 semaines, vous pouvez utiliser des spĂ©cificateurs dâintervalle de rĂ©vision similaires Ă git rev-list :
git blame v2.6.18.. -- foo git blame --since=3.weeks -- foo
Lorsque des spĂ©cificateurs de plage de rĂ©vision sont utilisĂ©s pour limiter lâannotation, les lignes qui nâont pas Ă©tĂ© modifiĂ©es depuis la limite de lâintervalle (soit le commit v2.6.18 ou le commit le plus rĂ©cent qui date de plus de 3 semaines dans lâexemple ci-dessus) sont blĂąmĂ©es pour ce commit de limite de plage.
Un moyen particuliĂšrement utile est de voir si un fichier ajoutĂ© comporte des lignes créées par copier-coller Ă partir de fichiers existants. Cela indique parfois que le dĂ©veloppeur a Ă©tĂ© nĂ©gligent et nâa pas refactorĂ© le code correctement. Vous pouvez dâabord trouver le commit qui a introduit le fichier avecâŻ:
git log --diff-filter=A --pretty=short -- foo
et ensuite annoter la modification entre le commit et ses parents, en utilisant la notation commit^! :
git blame -C -C -f $commit^! -- foo
SORTIE INCRĂMENTALE
Quand elle est appelĂ©e avec lâoption --incremental, la commande affiche le rĂ©sultat au fur et Ă mesure quâil est construit. La sortie parle gĂ©nĂ©ralement des lignes touchĂ©es par les commits les plus rĂ©cents en premier (câest-Ă -dire que les lignes seront annotĂ©es dans le dĂ©sordre) et est destinĂ©e Ă ĂȘtre utilisĂ©e par des visionneurs interactifs.
Le format de sortie est similaire au format Porcelain, mais il ne contient pas les lignes réelles du fichier qui est annoté.
-
Chaque entrée de blùme commence toujours par une ligne de :
<sha1-hex-de-40-octets> <lignesource> <lignerésultat> <nombre-de-lignes>
Les numéros de ligne comptent à partir de 1.
-
La premiĂšre fois quâun commit apparaĂźt dans le flux, diverses autres informations le concernant sont affichĂ©es avec une Ă©tiquette dâun mot au dĂ©but de chaque ligne dĂ©crivant les informations supplĂ©mentaires du commit (auteur, email, validateur, dates, rĂ©sumĂ©, etc.).
-
Contrairement au format Porcelaine, lâinformation sur le nom de fichier est toujours donnĂ©e et termine lâentrĂ©e :
"nom de fichier" <nom-de-fichier-avec-espaces-échappés-ici>
et donc il est vraiment trĂšs facile Ă analyser pour un analyseur orientĂ© lignes et mots (ce qui devrait ĂȘtre assez naturel pour la plupart des langages de script).
NotePour les personnes qui font de lâanalyse syntaxiqueâŻ: pour la rendre plus robuste, il suffit dâignorer toutes les lignes entre la premiĂšre et la derniĂšre (lignes "<sha1>" et "nom-de-fichier") oĂč vous ne reconnaissez pas les mots-clĂ©s (ou ne vous souciez pas de celui-lĂ en particulier) au dĂ©but des lignes "informations Ă©tendues". De cette façon, sâil y a un jour des informations ajoutĂ©es (comme le codage du commit ou le commentaire Ă©tendu du commit), un visualisateur de blame ne sâen souciera pas.
TRANSFORMER LES AUTEURS
Voir gitmailmap[5].
CONFIGURATION
Tout ce qui se trouve en dessous de cette ligne dans cette section est inclus de maniĂšre sĂ©lective Ă partir de la documentation git-config[1]. Le contenu est le mĂȘme que celui qui sây trouve :
|
Warning
|
Missing See original version for this content. |
GIT
Fait partie de la suite git[1]
TRADUCTION
Cette page de manuel a été traduite par Jean-Noël Avila <jn.avila AT free DOT fr> et les membres du projet git-manpages-l10n. Veuillez signaler toute erreur de traduction par un rapport de bogue sur le site https://github.com/jnavila/git-manpages-l10n .