232 votes

Comment trouver le dernier git commit ayant modifié un fichier?

Je veux trouver le commit le plus récent qui a modifié un fichier source.

Je peux utiliser git blame pour voir toutes les dates des validations par ligne, mais il est difficile de savoir exactement quelle validation a été la dernière à toucher le fichier.

Comment trouver le dernier commit ayant touché un fichier donné dans mon référentiel git?

300voto

Jo Liss Points 6692

git log prend en charge la consultation de l'historique de fichiers (et de répertoires) spécifiques, afin que vous puissiez écrire ceci:

 git log my/file.c
 

Si vous voulez vraiment que la liste d' une commettras plus récente, vous pouvez utiliser -n 1 :

 git log -n 1 -- my/file.c
 

(Le -- empêche le nom de fichier d'être interprété comme un nom de validation, juste au cas où il serait ambigu.)

30voto

TheBamf Points 41

Si vous souhaitez tout simplement obtenir le hash du dernier commit de modifier un ensemble de fichiers (et que vous voulez éviter awk), vous pouvez utiliser:

git log -n 1 --pretty=format:%h -- <path>

Cela peut être utile pour obtenir la validation de hachage pour la suite de l'utilisation avec des git describe.

Par exemple (dans le cas où c'est utile pour n'importe qui)...

J'ai créer un courant id de version en considérant le dernier commit pour modifier n'importe quel fichier source (en supposant que vous marquez des versions avec des balises comme l' mycode-1.2.1):

COMMIT=$(git log -n 1 --pretty=format:%h -- *.c *.h)
if VN=$(git describe --always --abbrev=5 --match "mycode-*" $COMMIT 2>/dev/null) &&
case "$VN" in
mycode-*)
    git update-index -q --refresh
    test -z "$(git diff-index --name-only HEAD *.c *.h)" ||
    VN="$VN-mod" ;;
*) VN="mycode-unknown-g$VN" ;;
esac
then
    continue
else
VN="mycode-unknown"
fi

Ce produit ids, comme:

  • mycode-1.2.1 - lorsque l'état actuel de la source des fichiers correspond à une tagged version
  • mycode-1.2.1-g3k7s2 - lorsque l'état actuel de la source des fichiers correspond à engager à la suite d'un tagged version
  • mycode-1.2.1-g3k7s2-mod - lorsque l'état actuel de la source des fichiers ont été modifiés depuis le dernier commit à la suite d'un tagged version
  • mycode-unknown - quand il n'y a pas encore de version tag créé

10voto

Noufal Ibrahim Points 32200

Je ne sais pas si c'est ce que vous voulez, mais si vous faites un git log <thefile> pour obtenir les commits qui ont modifié ce fichier. Vous pouvez choisir le plus haut. Ce devrait être celui que vous recherchez.

3voto

Joe Points 65

Une fois que vous avez l'ID SHA du commit que vous souhaitez utiliser avec git log FILENAME , vous devriez pouvoir faire git show SHA_ID_HERE pour voir ce que vous avez fait pour ce commit particulier. Vous n'avez même pas besoin d'entrer l'ID complet; les 6 premiers caractères devraient suffire.

3voto

fastmultiplication Points 1055

pour obtenir le ref sur une seule ligne, essayez:

 git log -n1 --oneline <path> | awk '{print $1;}'
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X