Recherchez-vous des modifications à un fichier sur une seule branche; dans toutes les succursales locales; sur toutes les succursales sur une seule télécommande; ou à travers tout cela? Je pense que tout cela nécessitera un script.
benhorgen
Réponses:
1083
Les --followtravaux pour un fichier particulier
git log --follow -- filename
Différence avec les autres solutions proposées
Notez que d'autres solutions incluent git log path(sans le --follow). Cette approche est pratique si vous souhaitez suivre par exemple les changements dans un répertoire , mais trébuche lorsque les fichiers ont été renommés (donc utiliser --follow filename).
+1 --followcompte pour les renommages, c'est donc plus robuste quegit log -- path
Gabe Moothart
42
Notez que --followaccepte un chemin d'accès , qui peut être un fichier mais aussi un répertoire. Dans ce dernier cas, il s'exécutera de manière récursive et signalera les modifications apportées à tous les fichiers en dessous de ce point. (Ce comportement n'est pas documenté dans la page de manuel et peut ne pas être permanent.)
StvnW
5
Quelle est la différence entre celui-ci et justegit log filename?
VaTo
8
@SaulOrtega, git log filenamene suit pas le changement de nom du fichier, c'est-à-dire qu'il affichera toutes les validations concernant ce nom de fichier (pas le fichier réel). Si vous créez des fichiers Xet Y, modifiés à la fois, puis supprimé Yet renommé Xpour Yet puis aussi changé, et que vous exécutez git log Y, vous obtiendrez des messages à la fois ancienneY et nouvelle une. Et le contraire, avec --followvous obtiendrez des commits concernant ce fichier quand il a été nommé Xet quand il a été nommé Y.
MarSoft
7
utilisez "git log --all filename" pour voir tous les commits dans toutes les branches
Lebnik
122
git log pathdevrait faire ce que vous voulez. De l' git loghomme :
[--] <path>…
Show only commits that affect any of the specified paths. To prevent confusion with
options and branch names, paths may need to be prefixed with "-- " to separate them
from options or refnames.
Ne fonctionne pas si le chemin d'accès au fichier a changé. La réponse de jackrabbit fonctionne pour ce cas.
kwahn
1
Cela fonctionne si vous devez restreindre le journal à une branche spécifique
ams
64
J'ai regardé cela de près et toutes ces réponses ne semblent pas vraiment me montrer tous les engagements dans toutes les branches.
Voici ce que j'ai trouvé en jouant avec les options de vue d'édition de gitk. Cela me montre tous les commits pour un fichier indépendamment de la branche, du local, du reflog et de la distance.
C'est parfait lorsque quelqu'un fait des changements mais oublie où ils ont commis les changements.
earthmeLon
2
Très utile. Comprend également les
livraisons cachées
Ce devrait être la réponse préférée. La question était de trouver tous les commits, celui-ci le fait.
carl verbiest
Avis qui --refloginclut les commits qui ont été rebasés / modifiés ou autrement rejetés. Cela devrait peut-être être évident, mais j'ai essayé de l'utiliser avec git loget essayais de comprendre pourquoi je voyais des commits apparemment dupliqués!
Soren Bjornstad
43
Utilisez la commande ci-dessous pour obtenir des validations pour un fichier spécifique:
Je comprends que cela ne répond pas exactement à la question car il voulait une liste de commits mais c'est de l'or et ça va dans mon dossier.
zkent
3
Cela ne fonctionnera pas du tout si le fichier n'existe pas dans la branche actuellement extraite. Vous pouvez ajouter la branche comme git log -p mybranch -- filenameou simplement utiliser git log --all -- filenamepour regarder dans toutes les branches.
Soren Bjornstad
37
Cela devrait être aussi simple que git log <somepath>; consultez la page de manuel ( git-log(1)).
Personnellement, j'aime l'utiliser git log --stat <path>pour voir l'impact de chaque commit sur le fichier.
Ou même -psi vous voulez voir le diff complet, pas seulement qu'il avait un certain nombre de lignes modifiées.
Cascabel
Certes, mais c'est assez bruyant étant donné que la plupart des fichiers ont été modifiés plusieurs fois au cours de leur vie. Je ne veux pas voir les différences complètes de chaque commit qui a touché un fichier. Je suis généralement à la recherche d'une chose spécifique, donc je peux obtenir un journal avec juste des impacts et ensuite git showsur les commits spécifiques qui semblent importants.
rfunduk
git log --stat --follow - * .html => affiche la liste des validations avec exactement un fichier dans chaque validation. Très agréable!
Sergio Belevskij
18
Alternativement (depuis Git 1.8.4), il est également possible d'obtenir simplement tous les commits qui ont changé une partie spécifique d'un fichier. Vous pouvez l'obtenir en passant la ligne de départ et le numéro de ligne de fin.
Le résultat renvoyé serait la liste des validations qui ont modifié cette partie particulière. La commande va comme:
Comme l'a souligné jackrabb1t, --followest plus robuste car il continue de répertorier l'historique au-delà des renommages / mouvements. Donc, si vous recherchez un fichier qui ne se trouve pas actuellement dans le même chemin ou un fichier qui a été renommé lors de diverses validations, --follow le suivra.
Cela peut être une meilleure option si vous souhaitez visualiser les changements de nom / chemin:
git log --follow --name-status -- <path>
Mais si vous voulez une liste plus compacte avec seulement ce qui compte:
--followfonctionne pour un seul chemin , qui pourrait être un répertoire. Si passé un répertoire, il s'exécutera récursivement et signalera les modifications apportées à tous les fichiers en dessous de ce point.
StvnW
10
Si vous essayez de --suivre un fichier supprimé lors d'une précédente utilisation de commit
Pour les gitdébutants: Utilisez également git log -p --follow -- filenamepour afficher les modifications. Notez également: "nom de fichier" peut être un fichier, un répertoire ou un sous-module.
Tino
8
Si vous souhaitez afficher toutes les validations qui ont modifié un fichier, dans toutes les branches, utilisez ceci:
Si vous souhaitez voir toutes les modifications apportées aux validations qui ont modifié un fichier particulier (plutôt que simplement les modifications apportées au fichier lui-même), vous pouvez transmettre --full-diff:
ce qui signifie que 5 commits ont touché ce fichier. C'est l'ordre chronologique inverse, donc le premier commit de la liste b7c4f0d7est le plus récent.
Il peut être installé à l'aide de "sudo apt-get install git-gui gitk". Il peut être utilisé pour voir les validations d'un fichier spécifique par "gitk <Filename>".
Réponses:
Les
--follow
travaux pour un fichier particulierDifférence avec les autres solutions proposées
Notez que d'autres solutions incluent
git log path
(sans le--follow
). Cette approche est pratique si vous souhaitez suivre par exemple les changements dans un répertoire , mais trébuche lorsque les fichiers ont été renommés (donc utiliser--follow filename
).la source
--follow
compte pour les renommages, c'est donc plus robuste quegit log -- path
--follow
accepte un chemin d'accès , qui peut être un fichier mais aussi un répertoire. Dans ce dernier cas, il s'exécutera de manière récursive et signalera les modifications apportées à tous les fichiers en dessous de ce point. (Ce comportement n'est pas documenté dans la page de manuel et peut ne pas être permanent.)git log filename?
git log filename
ne suit pas le changement de nom du fichier, c'est-à-dire qu'il affichera toutes les validations concernant ce nom de fichier (pas le fichier réel). Si vous créez des fichiersX
etY
, modifiés à la fois, puis suppriméY
et renomméX
pourY
et puis aussi changé, et que vous exécutezgit log Y
, vous obtiendrez des messages à la fois ancienneY
et nouvelle une. Et le contraire, avec--follow
vous obtiendrez des commits concernant ce fichier quand il a été nomméX
et quand il a été nomméY
.git log path
devrait faire ce que vous voulez. De l'git log
homme :la source
J'ai regardé cela de près et toutes ces réponses ne semblent pas vraiment me montrer tous les engagements dans toutes les branches.
Voici ce que j'ai trouvé en jouant avec les options de vue d'édition de gitk. Cela me montre tous les commits pour un fichier indépendamment de la branche, du local, du reflog et de la distance.
Il fonctionne également avec
git log
:la source
--reflog
inclut les commits qui ont été rebasés / modifiés ou autrement rejetés. Cela devrait peut-être être évident, mais j'ai essayé de l'utiliser avecgit log
et essayais de comprendre pourquoi je voyais des commits apparemment dupliqués!Utilisez la commande ci-dessous pour obtenir des validations pour un fichier spécifique:
la source
git log -p mybranch -- filename
ou simplement utilisergit log --all -- filename
pour regarder dans toutes les branches.Cela devrait être aussi simple que
git log <somepath>
; consultez la page de manuel (git-log(1)
).Personnellement, j'aime l'utiliser
git log --stat <path>
pour voir l'impact de chaque commit sur le fichier.la source
-p
si vous voulez voir le diff complet, pas seulement qu'il avait un certain nombre de lignes modifiées.git show
sur les commits spécifiques qui semblent importants.Alternativement (depuis Git 1.8.4), il est également possible d'obtenir simplement tous les commits qui ont changé une partie spécifique d'un fichier. Vous pouvez l'obtenir en passant la ligne de départ et le numéro de ligne de fin.
Le résultat renvoyé serait la liste des validations qui ont modifié cette partie particulière. La commande va comme:
où
upperLimit
est lestart_line_number
etlowerLimit
est leending_line_number
Plus d'informations - https://www.techpurohit.com/list-some-useful-git-commands
la source
Comme l'a souligné jackrabb1t,
--follow
est plus robuste car il continue de répertorier l'historique au-delà des renommages / mouvements. Donc, si vous recherchez un fichier qui ne se trouve pas actuellement dans le même chemin ou un fichier qui a été renommé lors de diverses validations, --follow le suivra.Cela peut être une meilleure option si vous souhaitez visualiser les changements de nom / chemin:
Mais si vous voulez une liste plus compacte avec seulement ce qui compte:
ou même
L'inconvénient est que cela
--follow
ne fonctionne que pour un seul fichier.la source
--follow
fonctionne pour un seul chemin , qui pourrait être un répertoire. Si passé un répertoire, il s'exécutera récursivement et signalera les modifications apportées à tous les fichiers en dessous de ce point.Si vous essayez de --suivre un fichier supprimé lors d'une précédente utilisation de commit
la source
git
débutants: Utilisez égalementgit log -p --follow -- filename
pour afficher les modifications. Notez également: "nom de fichier" peut être un fichier, un répertoire ou un sous-module.Si vous souhaitez afficher toutes les validations qui ont modifié un fichier, dans toutes les branches, utilisez ceci:
la source
Si vous souhaitez rechercher toutes les validations par
filename
et non parfilepath
, utilisez:la source
Si vous souhaitez voir toutes les modifications apportées aux validations qui ont modifié un fichier particulier (plutôt que simplement les modifications apportées au fichier lui-même), vous pouvez transmettre
--full-diff
:la source
[branch]
Utilisez
git log --all <filename>
pour afficher les commits influençant<filename>
dans toutes les branches.la source
En supposant que le package "gitk" est déjà installé.
S'il n'est pas installé, procédez comme suit:
Et puis essayez la commande ci-dessus. C'est pour Linux ... Cela pourrait aider les utilisateurs de Linux s'ils veulent une interface graphique.
la source
gitk
est fourni avec Git pour Windows.Pour obtenir simplement une liste des hachages de validation, utilisez
git rev-list
Production:
ce qui signifie que 5 commits ont touché ce fichier. C'est l'ordre chronologique inverse, donc le premier commit de la liste
b7c4f0d7
est le plus récent.la source
Sous Linux, vous pouvez utiliser gitk pour cela.
Il peut être installé à l'aide de "sudo apt-get install git-gui gitk". Il peut être utilisé pour voir les validations d'un fichier spécifique par "gitk <Filename>".
la source
Référence
la source