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-click
→ show 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 install tig
$ 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).
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.
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.
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.
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 :
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”