Afficher l'historique des modifications d'un fichier à l'aide de versioning Git
Comment puis-je consulter l'historique des modifications d'un fichier individuel dans Git, les détails complets de ce qui a changé?
J'ai autant 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?
Je suis en train de faire la transition à partir de MS SourceSafe et utilisé pour être un simple right-click
→ show history
.
- Le lien ci-dessus n'est plus valide. Ce lien est aujourd'hui: Git Community Book
- Le lien ci-dessus (posté par Chris) n'est plus valide. Ce lien est aujourd'hui: git-scm.com/book/en/v2
Vous devez vous connecter pour publier un commentaire.
Pour cela je voudrais utiliser:
ou suivre le nom de fichier passé renomme
gitk -- [filename]
.git log -- [filename]
gitk
ne fait pas partie de la base de git paquet. Vous avez besoin de télécharger le paquetage tk utiliser gitk. @VolkA la réponse est mieux,git log -p filename
fonctionne sans dépendances.git
pasgitk
.git log -p
réponse ci-dessous est beaucoup plus applicable à une majorité d'utilisateurs.gitk
?Vous pouvez utiliser
laisser git générer des taches pour chaque entrée de journal.
Voir
pour plus d'options, peut effectivement faire beaucoup de belles choses 🙂 Pour obtenir juste le diff pour un commit, vous pouvez
ou de toute autre révision par leur identifiant. Ou utiliser
pour parcourir les changements visuellement.
--follow
également envisager de fichier renomme.--follow
drapeau-p
=Generate patch
= afficher diff à l'exception de commettre descriptiongit log --follow -p -- path-to-file
Cela permettra de montrer ensemble l'histoire du fichier (y compris de l'histoire au-delà de renomme et avec des diffs pour chaque changement).
En d'autres termes, si le fichier nommé
bar
était autrefois appeléfoo
, puisgit log -p bar
(sans le--follow
option) affiche le fichier de l'histoire jusqu'au point où il a été rebaptisé -- il n'affiche pas le fichier de l'histoire quand il était connu commefoo
. À l'aide degit log --follow -p bar
affichera le fichier de toute l'histoire, y compris toute modification du fichier quand il était connu commefoo
. Le-p
option permet de s'assurer que les diffs sont inclus pour chaque changement.-CC
drapeau aveclog --follow file
ou il ne trouve rien (git 1.7.0.4).--follow
assure que vous consultez le fichier renomme (2.)-p
assure que vous voyez la façon dont le fichier est changé en (3.) il est en ligne de commande uniquement.--
avant votrefile
, et ce serait absolument la meilleure réponse!--
a été ajouté, mais je ne sais pas pourquoi cela fait-il mieux? Qu'est-ce qu'il fait?--
option indique à Git qu'il a atteint la fin des options et que tout ce qui suit--
doit être considéré comme un argument. Pourgit log
cela ne fait aucune différence si vous avez un nom de chemin d'accès qui commence par un dash. Dire que vous avez voulu savoir sur l'histoire d'un fichier qui a le triste nom de "--suivre":git log --follow -p -- --follow
--
est utile parce qu'il peut également se prémunir contre toutrevision
un nom correspondant au nom de fichier que vous avez entré, qui peuvent être réellement effrayant. Par exemple: Si vous aviez à la fois une direction et un fichier nomméfoo
,git log -p foo
montrer le git log de l'histoire jusqu'àfoo
, pas de l'histoire pour le fichierfoo
. Mais @DanMoulding est juste que depuis le--follow
commande ne prend qu'un seul nom de fichier comme argument, c'est moins nécessaire car il ne peut pas être unrevision
. Je viens d'apprendre que. Peut-être vous avez eu raison de le laisser hors de votre réponse; je ne suis pas sûr.--follow
il serait utile d'expliquer-p
trop.--all
de voir l'historique d'un dossier dans toutes les branches. peut être utile dans certains cas.skipping...
suivie par une série de tildes~
(sans doute un pour chaque commit/ je ne sais pas).fatal: unrecognized argument: --folow
. Mais la commandegit log -p <file/to/the/path>
travaillé.--follow
, avec 2 L...Si vous préférez rester à la base de texte, vous pouvez utiliser tig.
D'Installation Rapide:
# apt-get install tig
$ brew install tig
L'utiliser pour afficher l'historique sur un seul fichier:
tig [filename]
Ou parcourir détaillée des pensions de l'histoire:
tig
Similaire à
gitk
mais à base de texte. Prend en charge les couleurs dans le terminal!tig -- path/to/specific/file
git whatchanged -p nom de fichier
est également équivalent àgit log -p nom de fichier
dans ce cas.Vous pouvez aussi voir quand une ligne de code spécifique à l'intérieur d'un fichier a été modifié avec
git blâmer le nom de fichier
. Cela permet d'imprimer un court commettre id, l'auteur, timestamp, et pour terminer la ligne de code pour chaque ligne dans le fichier.Ceci est très utile lorsque vous avez trouvé un bug et vous voulez savoir quand il a été introduit (ou qui en est responsable).
filename
n'est pas une option dans la commandegit blame filename
.SourceTree utilisateurs
Si vous utilisez SourceTree de visualiser votre référentiel (c'est gratuit et assez bon), vous pouvez cliquer-droit sur un fichier et sélectionnez Journal Sélectionné
L'écran (ci-dessous) est beaucoup plus convivial que de gitk et la plupart des autres options disponibles. Malheureusement (à l'époque) il n'est pas facile pour le lancement de ce point de vue à partir de la ligne de commande — SourceTree de la CLI actuellement ouvre juste repos.
gitk
pour trouver leSHA1
de hachage, puis ouvrezSourceTree
pour entrerLog Selected..
basé sur la trouvéSHA1
.Pour montrer ce que la révision et l'auteur de la dernière modification de chaque ligne d'un fichier:
ou si vous souhaitez utiliser le puissant blâmer GUI:
Résumé des autres réponses après avoir lu à travers eux et de jouer un peu:
L'habituelle ligne de commande serait
Mais vous pouvez également utiliser les deux gitk (gui) ou tig (texte de l'interface utilisateur) pour donner beaucoup plus lisible façons de voir les choses.
Sous debian/ubuntu, la commande d'installation pour ces beaux outils est comme prévu :
Et je suis actuellement en utilisant:
de sorte que je peux tout type
gdf dir
pour obtenir un concentré de l'histoire de tout dans le sous-répertoiredir
.--all
est pour toutes les branches, le reste est expliqué dans @Dan réponseAjouter cet alias pour votre .gitconfig:
Et utiliser la commande comme ceci:
La sortie, l'air presque exactement le même que le gitk de sortie. Profitez de.
git lg -p filename
- il renvoie une belle diff de dossier recherché.Dernièrement, j'ai découvert
tig
et l'a trouvé très utile. Il y a certains cas, je souhaiterais avoir il n'A ou B, mais la plupart du temps, c'est plutôt soignée.Pour votre cas,
tig <filename>
peut-être ce que vous cherchez.http://jonas.nitro.dk/tig/
J'ai écrit git-lecture pour cet objectif précis
Cela a l'avantage à la fois de l'affichage des résultats dans la ligne de commande (comme
git log -p
) tout en laissant de l'étape à chaque commit en utilisant les touches fléchées (commegitk
).Ou:
gitx -- <path/to/filename>
si vous utilisez gitx
Si vous voulez voir l'ensemble de l'histoire d'un fichier, y compris sur tous les autres branches utilisation:
Avec l'excellent Git Extensions, vous aller à un moment de l'histoire où le fichier existait encore (si il a été supprimé, sinon il suffit d'aller à la TÊTE), passez à la
File tree
onglet, cliquez-droit sur le fichier et choisirFile history
.Par défaut, il suit le fichier par le biais de la renomme et la
Blame
onglet permet de voir le nom à une révision.Il a quelques petites erreurs, comme montrant
fatal: Not a valid object name
dans leView
onglet en cliquant sur la suppression de la révision, mais je peux vivre avec ça. 🙂Si vous utilisez git GUI (sur Windows) dans le Référentiel de menu, vous pouvez utiliser le bouton "Visualiser maître de l'Histoire". Mettez en surbrillance un commit dans le volet supérieur et d'un fichier en bas à droite et vous verrez la diff pour qui s'engagent dans le coin inférieur gauche.
SmartGit:
Vous pouvez également essayer ce qui énumère la liste des commits qui a changé une partie spécifique d'un fichier (mis en œuvre dans Git 1.8.4).
Résultat retourné serait la liste des commits qui a modifié cette partie en particulier. Commande :
où upperLimit est le start_line_number et lowerLimit est le ending_line_number du fichier.
Plus de détails à https://www.techpurohit.com/list-some-useful-git-commands
La réponse que je cherchais, qui n'était pas dans ce thread c'est de voir les modifications dans les fichiers que j'avais mis en scène pour la validation. c'est à dire
git diff origin/master
pour afficher entièrement les différences entre votre succursale locale et la branche master (qui peut être mise à jour à distance viagit fetch
)Si vous utilisez TortoiseGit vous devriez être en mesure de faire un clic droit sur le fichier et ne
TortoiseGit --> Show Log
. Dans la fenêtre qui s'affiche, assurez-vous que:'
Show Whole Project
' option n'est pas cochée.'
All Branches
' option est cochée.git diff -U <filename>
vous donner un diff unifié.Il doit être de couleur rouge et vert. Si ce n'est pas, exécutez:
git config color.ui auto
premier.Si vous utilisez eclipse avec le plugin git, il a une excellente vue de comparaison avec l'histoire. Clic droit sur le fichier et sélectionnez "comparer avec"=> "histoire"
Vous pouvez utiliser vscode avec GitLens, c'est un outil très puissant.
Après avoir installé GitLens, allez à la GitLens onglet, sélectionnez
FILE HISTORY
et vous pouvez le parcourir.