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-click
→ show history
.
Pour cela j'utiliserais:
gitk [filename]
ou suivre le nom du fichier après les renommer
gitk --follow [filename]
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.
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.
Si vous préférez rester basé sur du 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 détaillé des pensions: tig
Similaire à gitk
mais à base de 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 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).
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é
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.
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
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
.
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.
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.
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
).
Si vous voulez voir tout l'historique d'un fichier, y compris sur tous les autres branches utilisent:
gitk --all <filename>
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.
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. :-)
SmartGit :
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
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
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.
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
.
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.
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"