Pourquoi «git log -‌- foo» ne fonctionne-t-il pas pour le fichier supprimé foo?

89

Mon référentiel a subi des changements tels que:

  1. ... certains commits non liés ...
  2. Commit nouveau fichier fooavec 100 lignes de contenu
  3. ... des commits intermédiaires, dont certains touchent foo...
  4. Insérez le contenu de fooen haut d'un fichier existant baret git rm foodans le même commit
  5. ... plus de commits non liés ...

Maintenant, je veux voir le journal du fichier supprimé foo. Tout ce que j'ai lu, y compris sur SO, dit que je devrais pouvoir le faire git log -- foo, mais cette commande ne produit aucune sortie.

Si je trouve le commit qui inclut la suppression, fooje peux git log 1234abcd -- fooet voir son journal, donc je pense que mon chemin vers foon'est pas le problème. Notez également que les git merge-base HEAD 1234abcdsorties 1234abcd[...], donc je pense que cela devrait prouver que le commit est accessible à partir de HEAD. Notez qu'il n'y a pas de fichier foodans mon arbre de travail (évident, car il a été supprimé). Utilisation de Git 1.7.1.1 sur OS X.

Pourquoi ne git log -- foofonctionne pas pour moi et comment puis-je y remédier? Merci!

user385804
la source
5
Avez-vous essayé git log --follow -- fooou git log --follow -M -- foo? (pour forcer la détection de changement de nom)
VonC
1
Merde, j'ai essayé - --followmais en lisant historyje vois que j'avais depuis cd'ed ailleurs quand je l'ai essayé, rendant le chemin invalide. git log --follow -- footravaillé quand j'ai essayé à partir du bon point de départ. Je suppose que Git a envisagé de foodevenir barune sorte de changement de nom? En tout cas, merci! Je serai heureux de créditer cela si vous le republiez comme réponse.
user385804
1
Ennuyeux qui --est changé dans le titre de la question ...
Cascabel

Réponses:

118

Vous souhaitez utiliser l' --followoption sur git log, qui est décrite dans la page de manuel comme:

Continue listing the history of a file beyond renames.

En effet, non seulement cela vous permet de voir l'historique d'un fichier renommé, mais cela vous permet également de visualiser l'historique d'un fichier qui n'est plus dans l'arborescence de travail. Ainsi, la commande que vous devez utiliser devrait ressembler à quelque chose comme:

git log --follow -- foo

Mettre à jour:

Git 2.9+ a maintenant activé cela par défaut pour toutes les commandes git diffet git log:

Les commandes de niveau Porcelain destinées à l'utilisateur final dans les familles "git diff" et "git log" activent par défaut la détection de renommage; vous pouvez toujours utiliser la variable de configuration "diff.renames" pour désactiver cela.

Merci à x-yuri pour le heads-up!

Nathan Kleyn
la source
1
Cela a fonctionné pour moi sans la --followpièce. J'avais juste besoin d'ajouter --. Je cours git-2.9.0.
x-yuri