web-dev-qa-db-fra.com

Comment puis-je afficher les changements mis en scène?

J'ai mis en scène quelques changements à engager; Comment puis-je voir le diff de tous les fichiers mis en scène pour le prochain commit? Je suis au courant de statut git , mais j'aimerais voir les diffs réels - pas seulement les noms des fichiers mis en scène.

J'ai vu que la page de manuel git-diff (1) dit

git diff [--options] [-] […]

Ce formulaire permet d'afficher les modifications apportées par rapport à l'index (zone intermédiaire pour la prochaine validation). En d'autres termes, les différences sont ce que vous pourriez dire à Git d'ajouter davantage à l'index, mais vous ne l'avez toujours pas. Vous pouvez mettre en scène ces modifications en utilisant git-add (1).

Malheureusement, je ne peux pas tout comprendre. Il doit y avoir un one-liner très pratique pour lequel je pourrais créer un alias, non?

1969
Frerich Raabe

Cela devrait juste être:

git diff --cached

--cached signifie afficher les modifications apportées au cache/index (c.-à-d. Modifications mises en scène) par rapport à la HEAD actuelle. --staged est un synonyme de --cached.

--staged et --cached ne pointe pas sur HEAD, mais sur la différence par rapport à HEAD. Si vous choisissez ce que vous voulez commettre en utilisant git add --patch (ou git add -p), --staged renverra ce qui est mis en scène.

2411
CB Bailey

Un graphique simple rend ceci plus clair:

Simple Git diffs

git diff

Affiche les modifications entre le répertoire de travail et l'index. Cela montre ce qui a été changé, mais n'est pas mis en scène pour un commit.

git diff --cached

Affiche les modifications entre l'index et le HEAD (qui est la dernière validation sur cette branche). Cela montre ce qui a été ajouté à l'index et mis en scène pour un commit.

git diff HEAD

Affiche toutes les modifications entre le répertoire de travail et HEAD (y compris les modifications apportées à l'index). Cela montre toutes les modifications depuis la dernière validation, qu'elles aient été programmées ou non pour la validation.

Aussi :

Il y a un peu plus de détails sur 65Git.

1526
Abizern

Si vous êtes intéressé par une vue visuelle côte à côte, l'outil diffuse visual diff peut le faire. Il affichera même trois volets si certains changements, mais pas tous, sont mis en scène. En cas de conflit, il y aura même quatre volets.

Screenshot of diffuse with staged and unstaged edits

Invoquer avec

diffuse -m

dans votre copie de travail Git.

Si vous me demandez, la meilleure différence visuelle que j'ai vue depuis une décennie. En outre, il n'est pas spécifique à Git: il interagit avec une pléthore d'autres VCS, notamment SVN, Mercurial, Bazaar, ...

Voir aussi: Afficher l’arbre mis en scène et l’arbre de travail dans git diff?

52
krlmlr

Notez que _git status -v_ affiche également les modifications planifiées! (ce qui signifie que vous devez avoir mis en scène - _git add_ - quelques modifications. Aucune modification par étape, pas de diff avec _git status -v_.
Il fait ça depuis Git 1.2.0, février 2006 )

Dans sa forme longue (par défaut), git status possède une option "documentée" non documentée qui affiche en réalité le diff entre HEAD et index.

Et elle est sur le point de devenir encore plus complète: voir " Afficher l’arborescence mise en scène et en travail dans git diff? " (git 2.3.4+, Q2 2015):

_git status -v -v
_
48
VonC

Vous pouvez utiliser cette commande.

git diff --cached --name-only

L'option --cached de git diff signifie obtenir des fichiers mis en scène, et l'option --name-only signifie obtenir uniquement les noms des fichiers.

25
Yash Patadia

À partir de la version 1.7, il devrait être:

git diff --staged
16
ML13

UTILISER UN OUTIL VISUAL DIFF

La réponse par défaut (sur la ligne de commande)

Les principales réponses ici montrent correctement comment afficher les modifications mises en cache/mises en cache dans le fichier Index:

$ git diff --cached

ou $ git diff --staged qui est un alias.


Lancer l'outil Visual Diff à la place

La réponse par défaut générera les modifications de diff lors de git bash (c'est-à-dire sur la ligne de commande ou dans la console). Pour ceux qui préfèrent une représentation visuelle des différences de fichiers mis en scène, il existe un script disponible dans git qui lance un outil de comparaison visuelle pour chaque fichier affiché plutôt que de les afficher sur la ligne de commande, appelée difftool:

$ git difftool --staged

Ceci fera la même chose que git diff --staged, sauf que chaque fois que l'outil diff est exécuté (c'est-à-dire chaque fois qu'un fichier est traité par diff), il lancera l'outil diff visuel par défaut (dans mon environnement, c'est - kdiff).

Une fois l’outil lancé, le script git diff sera mis en pause jusqu’à la fermeture de votre outil de comparaison visuelle. Par conséquent, vous devrez fermer chaque fichier pour voir le suivant.


Vous pouvez toujours utiliser difftool à la place de diff dans les commandes git

Pour tous vos besoins visuels, git difftool fonctionnera à la place de toute commande git diff, y compris de toutes les options.

Par exemple, pour que l’outil visuel diff soit lancé sans demander s’il faut le faire pour chaque fichier, ajoutez l’option -y (je pense que vous voudrez généralement cela !!):

$ git difftool -y --staged

Dans ce cas, chaque fichier de l'outil de différenciation visuelle sera extrait, un à la fois, et le suivant après la fermeture de l'outil.

Ou regarder le diff d'un fichier particulier qui est mis en scène dans le Index:

$ git difftool -y --staged <<relative path/filename>>

Pour toutes les options, voir la page de manuel:

$ git difftool --help


Configuration de Visual Git Tool

Pour utiliser un outil visuel git autre que celui par défaut, utilisez l'option -t <tool>:

$ git difftool -t <tool> <<other args>>

Ou bien, consultez la page de manuel difftool pour savoir comment configurer git pour utiliser un autre outil de diff visuel par défaut.

14
LightCC

Pour utilisation de la comparaison zone de stockage intermédiaire/référentiel (dernier commit)

 $git diff --staged

La commande compare vos modifications planifiées ($ git add fileName) à votre dernier commit. Si vous voulez voir ce que vous avez mis en scène qui ira dans votre prochain commit, vous pouvez utiliser git diff --staged. Cette commande compare vos modifications planifiées à votre dernier commit.

Pour une comparaison travail/mise en scène, utilisez

$ git diff 

La commande compare ce qui se trouve dans votre répertoire de travail à ce qui se trouve dans votre zone de transfert. Il est important de noter que git diff n’affiche pas en soi toutes les modifications effectuées depuis votre dernière validation, mais uniquement les modifications qui ne sont pas encore décomposées. Si vous avez mis en scène toutes vos modifications ($ git add fileName), git diff ne vous donnera aucun résultat.

De même, si vous mettez en scène un fichier ($ git add fileName) puis le modifiez, vous pouvez utiliser git diff pour voir les modifications apportées au fichier et les modifications non mises en scène.

12
Goyal Vicky

Si vos intentions sont de cibler une branche de référent à distance et que votre premier passage dans un journal de modification de validation était incomplet, vous pouvez corriger l'instruction de validation avant de procéder de la sorte.

Localement

... faire des changements ...

git diff # look at unstaged changes

git commit -am"partial description of changes"

... rappeler plus de changements non mentionnés dans commit ...

git diff Origin/master # regarde les changements mis en scène mais pas poussés

... modifier la déclaration de validation mise en scène ...

git commit --amend -m"i missed mentioning these changes ...."

git Push
8
Marc Condon

Si vous avez plusieurs fichiers avec des modifications planifiées, il peut être plus pratique d'utiliser git add -i, puis sélectionnez 6: diff et, enfin, choisissez le (s) fichier (s) qui vous intéressent.

7
Fred Schoen

Par défaut, git diff est utilisé pour afficher les modifications qui ne sont pas ajoutées à la liste des fichiers mis à jour de git. Mais si vous souhaitez afficher les modifications ajoutées ou en quinconce, vous devez fournir des options supplémentaires permettant à git de savoir que les fichiers en quinconce ou ajoutés vous intéressent diff.

$ git diff          # Default Use
$ git diff --cached # Can be used to show difference after adding the files 
$ git diff --staged # Same as 'git diff --cached' mostly used with latest version of git 

Exemple

$ git diff 
diff --git a/x/y/z.js  b/x/y/z.js index 98fc22b..0359d84 100644
--- a/x/y/z.js 
+++ b/x/y/z.js @@ -43,7 +43,7 @@ var a = function (tooltip) {

-        if (a)
+        if (typeof a !== 'undefined')
             res = 1;
         else
             res = 2;

$ git add x/y/z.js
$ git diff
$

Une fois que vous avez ajouté les fichiers, vous ne pouvez pas utiliser la valeur par défaut de 'git diff'. Vous devez procéder comme suit: -

$ git diff --cached
diff --git a/x/y/z.js  b/x/y/z.js index 98fc22b..0359d84 100644
    --- a/x/y/z.js 
    +++ b/x/y/z.js @@ -43,7 +43,7 @@ var a = function (tooltip) {

    -        if (a)
    +        if (typeof a !== 'undefined')
                 res = 1;
             else
                 res = 2;
6
Deepak Dixit

git gui et git-cola sont des utilitaires graphiques permettant d'afficher et de manipuler l'index. Les deux comprennent des différences visuelles simples pour les fichiers de stockage, et git-cola peut également lancer un outil de comparaison visuelle plus sophistiqué côte à côte.

Voir ma réponse étroitement liée à Comment supprimer un fichier de l'index dans git? , ainsi que ce catalogue officiel de Git - Clients GUI .

2
nobar

Pensez aussi à l'outil gitk, fourni avec git et très utile pour voir les changements

0
sam