Git diff pour afficher uniquement les lignes qui ont été modifiées
Quand je fais un git diff, il présente des lignes qui ont été ajoutées:
+ this line is added
lignes qui ont été supprimés:
- this line is removed
mais il montre aussi le nombre de lignes qui ne sont pas modifiées:
this line is not modified
this line is also not modified
Cette résultats dans le git diff ressembler à ceci:
+ this line is added
this line is not modified
- this line is removed
this line is not modified
Puis-je demander à git pour afficher uniquement les lignes qui ont été modifiées et ignorer tout le reste du code qui n'a pas été modifié? J'ai écrit une méthode qui permettra de supprimer toutes les lignes qui n'ont pas un "+" ou le signe "-" devant eux, mais je suis sûr qu'il doit y avoir un moyen plus simple de faire cela.
Dans mon git diff, je suis seulement intéressé à voir les lignes qui ont été modifiées.
Merci d'avance.
Vous devez vous connecter pour publier un commentaire.
Ce que vous voulez, c'est un diff avec 0 lignes de contexte. Vous pouvez le générer avec:
ou
Vous pouvez également définir cela comme une option de configuration pour que le référentiel:
De l'avoir mis à l'échelle mondiale, pour n'importe quel dépôt:
git diff | egrep "^(\+|-) "
.git config --global diff.context 0
de l'avoir mis à l'échelle mondialeUn autre hack (sur un*x) pour afficher uniquement les lignes commençant par
+
et-
:Le code ci-dessus est le suivant:
git diff -U0
: choisissez 0 lignes de contexte+
ou-
--- a/
ou+++ b/
Note:
- La solution ci-dessus devra être modifiée si vous utilisez d'autres git diff options comme
-R
,--src-prefix
,--dst-prefix
,--no-prefix
, ...- Les deux grep peuvent être combinés en un seul
grep -E -v '^(\+\+\+ b/|--- a/|@@ |diff --git|index )'
, mais je trouve que le double grep version plus facile à comprendre.Suivi de Chris dernier commentaire, le principal problème avec le post-traitement est une que vous souhaitez conserver que les lignes commençant par
-|+
mais vous aussi vous voulez filtrer ceux qui commencent avec---|+++
. Si vous stockez les fichiers de patch dans votre repo (je ne, dans Pydoop), d'autre part, vous voulez garder les lignes qui commencent par--|++
, de sorte que la regexp devient un peu impliquées:La regexp utilise une anticipation négatif: voir Pierre Boughton, en réponse à cette question pour une explication détaillée.
Si vous le faites souvent, vous souhaiterez peut-être définir un alias git pour elle:
-P
ou--perl-regexp
est utilisé pour interpréter le motif comme une régulière Perl rexpression, mais n'est pas toujours mis en œuvre. Cela n'a pas fonctionné pour moi sur OSX. gnu.org/software/grep/manual/grep.html#grep-ProgramsJe pense que pour les cas simples les regex peuvent être beaucoup plus courte et plus facile à retenir, avec la réserve que cela ne fonctionnera pas si vous avez des modifications de la ligne où la ligne elle-même commence avec
+
ou-
La regex dit que la ligne doit commencer avec
+
ou-
, et le caractère ne doit être ni de ceux-ci. J'ai obtenu les mêmes résultats que j'ai échappé à la+
ou pas ici, d'ailleurs...Exemple:
Dire que j'ai changer
C
àX
,E
àY
, etG
àZ
.Comme je l'ai dit ci-dessus, si, c'est juste pour la plupart des cas. Si vous tuyau de sortie à un fichier
dout
, puis essayez de la même regex, ça ne marchera pas.De toute façon, l'espoir qui aide dans votre cas
- name: No pdb
dans un fichier yaml.Cette réponse conservera l'original rouge/vert couleurs pour des raisons de lisibilité. Je vous réserve quelques différences de syntaxe:
Explication:
git diff --color
est nécessaire pour éviter git à partir de la désactivation de la couleur quand il est de la tuyauterie.grep --color=never
est de prévenir grep retrait de la couleur d'origine et en mettant en évidence la chaîne trouvée.\e[31m
) ou vert (\e[32m
) codes d'échappement.$'...'
(ANSI-C citant syntaxe) ou-P
(syntaxe de perl), c'est laissergrep
à interpréter\e
ou\033
comme unESC
caractère.