Voir l'historique des modifications d'un fichier en utilisant Git versioning

Comment puis-je voir l'historique des modifications d'un fichier particulier dans Git, détails complets avec ce qui a changé?

j'ai reçu aussi loin que:

git log -- [filename]

qui me montre la validation de l'histoire du fichier, mais comment puis-je obtenir le contenu de chaque fichier changements?

j'essaie de faire la transition de MS SourceSafe et qui était un simple right-clickshow history .

2569
demandé sur amarnath 2008-11-10 18:42:32

21 réponses

pour ceci j'utiliserais:

gitk [filename]

ou à suivre nom de fichier renomé passé

gitk --follow [filename]
1994
répondu Claudio Acciaresi 2016-09-21 08:17:58

vous pouvez utiliser

git log -p filename

pour permettre à git de générer les patches pour chaque entrée log.

voir

git help log

pour plus d'options, peut effectivement faire beaucoup de belles choses :) Pour obtenir juste le diff pour un commit, vous pouvez

git show HEAD 

ou toute autre révision par identificateur. Ou utiliser

gitk

pour parcourir visuellement les changements.

1874
répondu VolkA 2014-10-03 16:56:19

git log --follow -p -- file

cela montrera le entier histoire du fichier (y compris l'histoire au-delà des renommages et avec diffs pour chaque changement).

en d'autres termes, si le fichier nommé bar a déjà été nommé foo , alors git log -p bar (sans l'option --follow ) montrera seulement l'histoire du fichier jusqu'au point où il a été renommé-il ne montrera pas l'histoire du fichier quand il était connu sous le nom foo . L'utilisation de git log --follow -p bar affichera l'historique complet du fichier, y compris toute modification apportée au fichier lorsqu'il était connu sous le nom foo . L'option -p garantit que les diffs sont inclus pour chaque changement.

1235
répondu Dan Moulding 2016-02-20 10:05:05

si vous préférez rester textuel, vous pouvez utiliser tig .

Installation Rapide:

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

utilisez-le pour visualiser l'histoire sur un seul fichier: tig [filename]

Ou parcourir les rapports détaillés histoire: tig

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

149
répondu Falken 2013-06-11 22:19:16

git whatchanged -p filename est également l'équivalent de git log -p filename dans ce cas.

vous pouvez également voir quand une ligne de code spécifique à l'intérieur d'un fichier a été changée avec git blame filename . Cela permet d'imprimer un identifiant de propagation court, l'auteur, l'horodatage, et une ligne complète de code pour chaque ligne du fichier. Ceci est très utile après que vous avez trouvé un bug et vous voulez savoir quand il a été introduit (ou qui est fautif il était).

104
répondu farktronix 2014-05-12 20:40:08

utilisateurs de SourceTree

si vous utilisez SourceTree pour visualiser votre dépôt (c'est gratuit et assez bon), vous pouvez faire un clic droit sur un fichier et sélectionner Log Selected

enter image description here

l'affichage (ci-dessous) est beaucoup plus convivial que gitk et la plupart des autres options énumérées. Malheureusement (pour le moment) il n'y a pas de moyen facile de lancer cette vue depuis la ligne de commande - CLI de SourceTree actuellement ouvre juste repos.

enter image description here

93
répondu Mark Fox 2013-07-30 18:55:48

pour montrer quelle révision et le dernier auteur ont modifié chaque ligne d'un fichier:

git blame filename

ou si vous voulez utiliser le puissant blâme GUI:

git gui blame filename
59
répondu yllohy 2013-10-23 18:00:00

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

la commande habituelle en ligne de commande serait

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

mais vous pouvez également utiliser gitk (gui) ou tig (text-ui) pour donner des façons beaucoup plus lisibles de le regarder.

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

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

sous debian / ubuntu, la commande install pour ces jolis outils est comme prévu:

sudo apt-get install gitk tig

et j'utilise actuellement:

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

pour que je puisse juste taper gdf dir pour obtenir une histoire focalisée de tout dans le sous-répertoire dir .

40
répondu John Lawrence Aspden 2012-12-05 18:38:20

ajoutez ce pseudonyme à votre .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 ressemblera presque exactement à la sortie gitk. Profiter.

22
répondu Palesz 2014-03-10 04:04:30

j'ai écrit git-lecture pour cet objectif 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 passer à travers chaque propagation en utilisant les touches fléchées (comme gitk ).

14
répondu Jian 2013-12-26 09:07:06

ou:

gitx -- <path/to/filename>

si vous utilisez gitx "151970920

13
répondu George Anderson 2010-09-17 16:50:30

récemment j'ai découvert tig et je l'ai trouvé très utile. Il y a des cas où j'aimerais que ce soit A ou B, mais la plupart du temps, c'est plutôt soigné.

pour votre affaire, tig <filename> pourrait être ce que vous cherchez.

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

13
répondu lang2 2017-07-29 01:04:45

Si vous voulez voir l'ensemble de l'histoire d'un fichier, y compris sur tous les autres branches d'utilisation:

gitk --all <filename>
9
répondu Adi Shavit 2012-08-07 13:57:47

si vous utilisez L'interface graphique git (sous Windows) dans le menu dépôt, vous pouvez utiliser"Visualize master's History". Mettez en surbrillance un commit dans la partie supérieure et un fichier dans la partie inférieure droite et vous verrez la diff pour ce commit dans la partie inférieure gauche.

8
répondu cori 2012-12-05 18:39:49

avec l'excellent Extensions Git , vous allez à un point dans l'histoire où le fichier existait encore (si elle a été supprimée, sinon il suffit d'aller à la tête), basculer sur l'onglet File tree , clic droit sur le fichier et choisir File history .

par défaut, il suit le fichier à travers les renommages, et l'onglet Blame permet de voir le nom lors d'une révision donnée.

il a quelques gotchas mineures, comme montrer fatal: Not a valid object name dans l'onglet View en cliquant sur la révision de suppression, mais je peux vivre avec cela. :- )

7
répondu PhiLho 2012-11-28 15:58:50

la réponse que je cherchais qui n'était pas dans ce thread est de voir les changements dans les fichiers que j'avais mis en scène pour commit. c'est à dire

git diff --cached
4
répondu Malks 2011-12-01 05:24:23

vous pouvez également essayer ceci qui liste les propagations qui ont changé une partie spécifique d'un fichier (implémenté dans Git 1.8.4).

résultat retourné serait la liste des propagations qui ont modifié cette partie particulière. Commande:

git log --pretty=short -u -L <upperLimit>,<lowerLimit>:<path_to_filename>

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

4
répondu jitendrapurohit 2015-08-13 09:50:11

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:

  • ' Show Whole Project ' l'option n'est pas cochée.

  • ' All Branches ' option cochée.

4
répondu user3885927 2015-12-02 09:52:25

SmartGit :

  1. dans le menu permettent d'afficher les fichiers inchangés: voir / Afficher les fichiers inchangés
  2. faites un clic droit sur le fichier et sélectionnez 'Log' ou appuyez sur' Ctrl-L '
4
répondu Antonín Slejška 2016-06-01 10:44:13

git diff -U <filename> vous donne une diff unifiée.

il doit être coloré en rouge et vert. Si ce n'est pas le cas, tapez d'abord git config color.ui auto .

3
répondu Lukasz Czerwinski 2013-09-06 09:12:42

Si vous utilisez eclipse avec le plugin git, il a une excellente vue de comparaison avec l'histoire. Faites un clic droit sur le fichier et sélectionnez " Comparer avec "=> "historique

2
répondu AhHatem 2013-01-02 19:35:17