Afficher l’historique des modifications d’un fichier à l’aide du contrôle de version Git

Comment puis-je afficher l’historique des modifications d’un fichier individuel dans Git, compléter les détails avec ce qui a changé?

J’ai autant que:

git log -- [filename] 

ce qui me montre l’historique de validation du fichier, mais comment puis-je obtenir le contenu de chacune des modifications de fichier?

J’essaie de faire la transition de MS SourceSafe et c’était un simple right-clickshow history .

Pour cela, j’utiliserais:

 gitk [filename] 

ou pour suivre les noms de fichiers renommés

 gitk --follow [filename] 

Vous pouvez utiliser

 git log -p filename 

laisser git générer les correctifs pour chaque entrée de journal.

Voir

 git help log 

pour plus d’options – il peut réellement faire beaucoup de belles choses 🙂 Pour obtenir juste le diff pour un engagement spécifique, vous pouvez

 git show HEAD 

ou toute autre révision par identifiant. Ou utiliser

 gitk 

parcourir les modifications visuellement.

git log --follow -p -- file

Cela affichera l’historique complet du fichier (y compris l’historique au-delà des noms et avec diffs pour chaque modification).

En d’autres termes, si le fichier nommé bar était autrefois nommé foo , alors git log -p bar (sans l’option --follow ) affichera uniquement l’historique du fichier jusqu’au point où il a été renommé. l’historique du fichier quand il était connu sous le nom de foo . Utiliser git log --follow -p bar affichera l’historique complet du fichier, y compris les modifications apscopes au fichier lorsqu’il sera appelé foo . L’option -p garantit que les diffs sont inclus pour chaque modification.

Si vous préférez restr en mode texte, vous pouvez utiliser tig .

Installation rapide:

  • apt-get : # apt-get install tig
  • Homebrew (OS X) : $ brew install tig

Utilisez-le pour afficher l’historique sur un seul fichier: tig [filename]
Ou parcourir l’historique repo détaillé: tig

Semblable à gitk mais basé sur du texte. Prend en charge les couleurs dans le terminal!

git whatchanged -p filename est également équivalent à git log -p filename dans ce cas.

Vous pouvez également voir quand une ligne de code spécifique dans un fichier a été modifiée avec le git blame filename . Cela imprimera un identifiant de validation court, l’auteur, l’horodatage et la ligne de code complète pour chaque ligne du fichier. Ceci est très utile après avoir trouvé un bogue et que vous voulez savoir quand il a été introduit (ou qui est la faute).

Utilisateurs de SourceTree

Si vous utilisez SourceTree pour visualiser votre référentiel (c’est gratuit et plutôt bon), vous pouvez cliquer avec le bouton droit sur un fichier et sélectionner Log Selected.

entrer la description de l'image ici

L’affichage (ci-dessous) est beaucoup plus convivial que gitk et la plupart des autres options répertoriées. Malheureusement (pour l’instant), il n’y a pas de moyen facile de lancer cette vue à partir de la ligne de commande – l’interface de ligne de commande de SourceTree ouvre actuellement les opérations de repository.

entrer la description de l'image ici

Pour montrer quelle révision et quel auteur a modifié la dernière fois chaque ligne d’un fichier:

 git blame filename 

ou si vous voulez utiliser la puissante interface graphique de blâme:

 git gui blame filename 

Résumé des autres réponses après les avoir lues et avoir joué un peu:

La commande de ligne de commande habituelle serait

 git log --follow --all -p dir/file.c 

Mais vous pouvez également utiliser soit gitk (gui), soit tig (text-ui) pour donner une manière beaucoup plus lisible de lire les choses.

 gitk --follow --all -p dir/file.c tig --follow --all -p dir/file.c 

Sous debian / ubuntu, la commande d’installation de ces outils est la suivante:

 sudo apt-get install gitk tig 

Et j’utilise actuellement:

 alias gdf='gitk --follow --all -p' 

pour que je puisse taper gdf dir pour avoir un historique de tout ce qui se trouve dans le sous répertoire dir .

Ajoutez cet alias à votre fichier .gitconfig:

 [alias] lg = log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'\n--abbrev-commit --date=relative 

Et utilisez la commande comme ceci:

 > git lg > git lg -- filename 

La sortie sera presque identique à la sortie gitk. Prendre plaisir.

J’ai écrit git-playback dans ce but précis

 pip install git-playback git playback [filename] 

Cela a l’avantage d’afficher les résultats dans la ligne de commande (comme git log -p ) tout en vous permettant de parcourir chaque validation à l’aide des touches fléchées (comme gitk ).

Ou:

gitx --

si vous utilisez gitx

Dernièrement, j’ai découvert le tig et l’ai trouvé très utile. Il y a des cas où je souhaiterais qu’il fasse A ou B mais la plupart du temps c’est plutôt soigné.

Pour votre cas, tig pourrait être ce que vous recherchez.

http://jonas.nitro.dk/tig/

Si vous voulez voir l’historique complet d’un fichier, y compris sur toutes les autres twigs, utilisez:

 gitk --all  

Si vous utilisez l’interface graphique git (sous Windows) dans le menu Référentiel, vous pouvez utiliser “Visualiser l’historique du maître”. Mettez en surbrillance un commit dans le volet supérieur et un fichier dans le coin inférieur droit et vous verrez le diff qui s’affiche en bas à gauche.

Avec les excellentes extensions Git , vous accédez à un sharepoint l’histoire où le fichier existe toujours (s’il a été supprimé, sinon allez à HEAD), passez à l’onglet File tree , cliquez avec le bouton droit sur le fichier et choisissez File history .

Par défaut, il suit le fichier à travers les noms, et l’onglet Blame permet de voir le nom à une révision donnée.

Il a quelques pièges mineurs, comme l’affichage fatal: Not a valid object name dans l’onglet View en cliquant sur la révision de suppression, mais je peux vivre avec cela. 🙂

La réponse que je cherchais et qui ne figurait pas dans ce fil de discussion est de voir les modifications apscopes aux fichiers que j’ai mis en scène pour les valider. c’est à dire

 git diff --cached 

Si vous utilisez TortoiseGit, vous devriez pouvoir faire un clic droit sur le fichier et faire TortoiseGit --> Show Log . Dans la fenêtre qui apparaît, assurez-vous que:

  • L’option ‘ Show Whole Project ‘ n’est pas cochée.

  • L’option ” All Branches ” est cochée.

SmartGit :

  1. Dans le menu, permet d’afficher les fichiers non modifiés: Afficher / Afficher les fichiers inchangés
  2. Faites un clic droit sur le fichier et sélectionnez «Log» ou appuyez sur «Ctrl-L»

git diff -U vous donne un diff unifié.

Il devrait être coloré sur le rouge et le vert. Si ce n’est pas le cas, lancez d’abord git config color.ui auto .

Vous pouvez également essayer ceci qui répertorie les commits qui ont changé une partie spécifique d’un fichier (implémenté dans Git 1.8.4).

Le résultat renvoyé serait la liste des commits qui ont modifié cette partie particulière. La commande va comme:

 git log --pretty=short -u -L ,: 

Où upperLimit est le start_line_number et lowerLimit est le ending_line_number du fichier.

Si vous utilisez eclipse avec le plugin git, il dispose d’une excellente vue de comparaison avec l’historique. Cliquez avec le bouton droit sur le fichier et sélectionnez “comparer avec” => “historique”