En gros, je ne veux pas voir le contenu modifié, mais uniquement les noms de fichier et les numéros de ligne.
Remarque: si vous recherchez 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 que cela soit), mais il est possible de le faire dans git, à l'aide d'un " diff externe "script.
En voici un assez nul. ce sera à vous de régler la sortie comme vous le souhaitez.
#! /bin/sh
#
# run this with:
# GIT_EXTERNAL_DIFF=<name of script> 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 "external diff", voir la description de GIT_EXTERNAL_DIFF
dans 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!
Les numéros de ligne comme le nombre de lignes modifiées ou les numéros de ligne 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.
git diff master --compact-summary
La sortie est:
src/app/components/common/sidebar/toolbar/toolbar.component.html | 2 +-
src/app/components/common/sidebar/toolbar/toolbar.component.scss | 2 --
C'est exactement ce dont vous avez besoin. Même format que lorsque vous effectuez un commit ou que vous extrayez de nouveaux commits à distance.
PS: C'est filaire que personne n'a répondu de cette façon.
Affiche les noms de fichiers et la quantité/le nombre de lignes qui ont changé dans chaque fichier entre maintenant et le commit spécifique:
git diff --stat <commit-hash>
1) Mon préféré:
git diff --name-status
Ajoute au préalable l'état du fichier, par exemple:
A new_file.txt
M modified_file.txt
D deleted_file.txt
2) Si vous voulez des statistiques, alors:
git diff --stat
montrera quelque chose comme:
new_file.txt | 50 +
modified_file.txt | 100 +-
deleted_file | 40 -
) Enfin, si vous voulez vraiment que les noms de fichiers:
git diff --name-only
Montrera simplement:
new_file.txt
modified_file.txt
deleted_file
git diff
à pour chaque ligne entre les fichiers
git diff --name-only
pour lister les fichiers de noms
Je sais que c'est une vieille question, mais sous Windows, cela filtre la sortie de git dans 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 @@ <some function name>
@@ -97,7 +98,7 @@ <another functon name>
Pour extraire les fichiers et les lignes modifiées, cela nécessite un peu plus de travail:
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 noms de fichiers/chemins uniquement, est fournie avec
git diff-tree --no-commit-id --name-only -r
HTH
Sur git version 2.17.1
, il n'y a pas d'indicateur intégré pour atteindre cet objectif.
Voici un exemple de commande permettant de filtrer le nom de fichier et les numéros de ligne d'un diff unifié:
git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? @@@)' | paste -s -d':'
Par exemple, le diff unifié:
$ git diff --unified=0
diff --cc foobar
index b436f31,df63c58..0000000
--- a/foobar
+++ b/foobar
@@@ -1,2 -1,2 +1,6 @@@ Line abov
++<<<<<<< HEAD
+bar
++=======
+ foo
++>>>>>>> Commit message
Aura pour résultat:
❯ git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? @@@)' | paste -s -d':'
foobar:1
Pour faire correspondre les résultats des commandes dans les résultats de correspondance grep communs:
$ git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? )| @@@.*' | sed -e '0~3{s/ @@@[ ]\?//}' | sed '2~3 s/$/\n1/g' | sed "N;N;N;s/\n/:/g"
foobar:1:1:Line abov
grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? )
: Correspond au nom de fichier de diff --cc <filename>
OR Correspond au numéro de ligne de @@@ <from-file-range> <from-file-range> <to-file-range>
OR Fait correspondre le texte restant après @@@
.sed -e '0~3{s/ @@@[ ]\?//}'
: Supprimez @@@[ ]\?
de chaque troisième ligne pour obtenir le contexte facultatif d'une ligne avant ++<<<<<<< HEAD
.sed '2~3 s/$/\n1/g'
: Ajoutez \n1
toutes les 3 lignes entre la 2ème et la 3ème ligne pour le numéro de colonne.sed "N;N;N;s/\n/:/g"
: Joignez toutes les 3 lignes avec un :
.