web-dev-qa-db-fra.com

Afficher l'historique des modifications d'un fichier à l'aide de la gestion des versions de Git

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

J'ai aussi loin que:

git log -- [filename]

qui me montre l'historique de validation du fichier, mais comment puis-je obtenir le contenu de chacune des modifications apportées au fichier?

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

2840
Richard

Pour cela j'utiliserais:

gitk [filename]

ou suivre le nom du fichier après les renommer

gitk --follow [filename]
2200
Claudio Acciaresi

Vous pouvez utiliser

git log -p filename

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

Voir

git help log

pour plus d'options - cela peut réellement faire beaucoup de bonnes choses :) Pour obtenir juste le diff pour un commit spécifique, vous pouvez

git show HEAD 

ou toute autre révision par identifiant. Ou utiliser

gitk

parcourir les modifications visuellement.

2066
VolkA

git log --follow -p -- path-to-file

Cela montrera l’historique entier du fichier (y compris l’histoire au-delà des renommage et avec des différences pour chaque modification).

En d'autres termes, si le fichier nommé bar a déjà été 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é - il ne montrera pas l'historique du fichier quand il s'appelait foo. L'utilisation de git log --follow -p bar affiche l'historique complet du fichier, y compris toute modification apportée au fichier alors qu'il s'appelait foo. L'option -p garantit que les différences sont incluses pour chaque modification.

1379
Dan Moulding

Si vous préférez rester basé sur du 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 détaillé des pensions: tig

Similaire à gitk mais à base de texte. Prend en charge les couleurs dans le terminal!

161
Falken

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 git blame filename . Cela affichera un identifiant de validation, l'auteur, l'horodatage et la ligne de code complète pour chaque ligne du fichier. Ceci est très utile une fois que vous avez trouvé un bogue et que vous voulez savoir quand il a été introduit (ou à qui il s’agit).

110
farktronix

Utilisateurs SourceTree

Si vous utilisez SourceTree pour visualiser votre référentiel (c'est gratuit et très bon), vous pouvez cliquer avec le bouton droit de la souris sur un fichier et sélectionner Journal sélectionné

enter image description here

L’affichage (ci-dessous) est beaucoup plus convivial que gitk et la plupart des autres options répertoriées. Malheureusement (pour le moment), il n’existe pas de moyen facile de lancer cette vue à partir de la ligne de commande: la CLI de SourceTree n’ouvre que les pensions.

enter image description here

98
Mark Fox

Pour montrer quelle révision et quel auteur ont modifié en dernier chaque ligne d'un fichier:

git blame filename

ou si vous voulez utiliser le puissant GUI Blame GUI:

git gui blame filename
62
yllohy

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

La commande habituelle en ligne de commande serait

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

Mais vous pouvez également utiliser soit gitk (gui) ou tig (text-ui) pour donner des moyens beaucoup plus lisibles de le voir.

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'

afin que je puisse simplement taper gdf dir pour obtenir un historique ciblé de tout ce qui se trouve dans le sous-répertoire dir.

45

Ajoutez cet alias à 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 sera presque identique à la sortie de Gitk. Prendre plaisir.

24
Palesz

Dernièrement, 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 chouette.

Dans votre cas, tig <filename> pourrait être ce que vous cherchez.

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

20
lang2

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

pip install git-playback
git playback [filename]

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

15
Jian

Ou:

gitx -- <path/to/filename>

si vous utilisez gitx

13
George Anderson

Si vous voulez voir tout l'historique d'un fichier, y compris sur tous les autres branches utilisent:

gitk --all <filename>
9
Adi Shavit

Si vous utilisez l'interface graphique de 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 en bas à droite et vous verrez la différence de ce commit en bas à gauche.

7
cori

Avec l'excellent Git Extensions , vous accédez à un point de l'historique où le fichier existait toujours (s'il a été supprimé, sinon passez simplement à HEAD), passez à l'onglet File tree, Faites un clic droit sur le fichier et choisissez File history.

Par défaut, il suit le fichier lors du renommage et l'onglet Blame permet de voir le nom d'une révision donnée.

Il y a quelques pièges mineurs, comme afficher fatal: Not a valid object name dans l'onglet View lorsque vous cliquez sur la révision de suppression, mais je peux vivre avec cela. :-)

7
PhiLho

SmartGit :

  1. Dans le menu activer pour afficher les fichiers non modifiés: Afficher/Afficher les fichiers non modifiés
  2. Faites un clic droit sur le fichier et sélectionnez "Journal" ou appuyez sur "Ctrl-L"
5

Vous pouvez également essayer ceci en répertoriant les commits ayant modifié 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. Commande:

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

où upperLimit correspond au numéro de début et à la ligne inférieure, et lowerLimit correspond au numéro de la ligne terminale du fichier.

Plus de détails sur https://www.techpurohit.com/list-some-useful-git-commands

5
jitendrapurohit

La réponse que je cherchais et qui ne figurait pas dans ce fil de discussion était de voir les modifications apportées aux fichiers que j'avais mis en scène pour la validation. c'est à dire.

git diff --cached
4
Malks

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.

4
user3885927

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

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

3

Vous pouvez utiliser vscode avec GitLens , c'est un outil très puissant. Après avoir installé GitLens, allez dans l’onglet GitLens, sélectionnez FILE HISTORY et vous pourrez le parcourir.

enter image description here

3
foxiris

Si vous utilisez Eclipse avec le plugin git, il offre une excellente vue en comparaison avec l’historique. Faites un clic droit sur le fichier et sélectionnez "comparer avec" => "historique"

2
AhHatem