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-click
→ show history
.
21 réponses
pour ceci j'utiliserais:
gitk [filename]
ou à suivre nom de fichier renomé passé
gitk --follow [filename]
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.
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.
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!
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).
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
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.
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
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
.
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.
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
).
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.
Si vous voulez voir l'ensemble de l'histoire d'un fichier, y compris sur tous les autres branches d'utilisation:
gitk --all <filename>
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.
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. :- )
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
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.
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.
SmartGit :
- dans le menu permettent d'afficher les fichiers inchangés: voir / Afficher les fichiers inchangés
- faites un clic droit sur le fichier et sélectionnez 'Log' ou appuyez sur' Ctrl-L '
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
.
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