Puis-je faire en sorte que git diff affiche uniquement les noms de fichier et les numéros de ligne modifiés?

Fondamentalement, je ne veux pas voir le contenu modifié, juste les noms de fichiers et les numéros de ligne.

Remarque: si vous cherchez simplement les noms des fichiers modifiés ( sans les numéros de ligne pour les lignes modifiées), c’est facile, cliquez sur ce lien pour obtenir une autre réponse ici .


Il n’y a pas d’option intégrée pour cela (et je ne pense pas que ce soit aussi utile), mais il est possible de le faire en utilisant git, à l’aide d’un script “diff externe”.

Voici une jolie merde; Ce sera à vous de régler le résultat comme vous le souhaitez.

#! /bin/sh # # run this with: # GIT_EXTERNAL_DIFF= git diff ... # case $# in 1) "unmerged file $@, can't show you line numbers"; exit 1;; 7) ;; *) echo "I don't know what to do, help!"; exit 1;; esac path=$1 old_file=$2 old_hex=$3 old_mode=$4 new_file=$5 new_hex=$6 new_mode=$7 printf '%s: ' $path diff $old_file $new_file | grep -v '^[<>-]' 

Pour plus de détails sur “diff externe”, voir la description de GIT_EXTERNAL_DIFF dans la page de manuel de git (autour de la ligne 700, assez proche de la fin).

Si facile:

 git diff --name-only 

Allez-y et diff!

Numéros de lignes comme nombre de lignes modifiées ou numéros de lignes réels contenant les modifications? Si vous voulez le nombre de lignes modifiées, utilisez git diff --stat . Cela vous donne un affichage comme celui-ci:

 [me@somehost:~/newsite:master]> git diff --stat whatever/views/gallery.py | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-) 

Il n’y a pas d’option pour obtenir les numéros de ligne des modifications elles-mêmes.

Je sais que c’est une vieille question mais sous Windows, cela filtre la sortie git vers les fichiers et modifie les numéros de ligne:

(git diff -p --stat) | findstr "@@ --git"

 diff --git a/dir1/dir2/file.cpp b/dir1/dir2/file.cpp @@ -47,6 +47,7 @@  @@ -97,7 +98,7 @@  

Pour extraire les fichiers et les lignes modifiées, il faut travailler un peu plus:

for /f "tokens=3,4* delims=-+ " %f in ('^(git diff -p --stat .^) ^| findstr ^"@@ --git^"') do @echo %f

 a/dir1/dir2/file.cpp 47,7 98,7 

La sortie la plus propre, c’est-à-dire les noms de fichiers / chemins uniquement, est fournie avec

 git diff-tree --no-commit-id --name-only -r 

HTH