Question Comment puis-je montrer les changements qui ont été mis en scène?


J'ai mis en scène quelques changements à commettre; comment puis-je voir le diff de tous les fichiers qui sont mis en scène pour la prochaine validation? Je suis conscient de git status, mais j'aimerais voir les différences réelles - pas seulement les noms des fichiers qui sont mis en scène.

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

git diff [--options] [-] [...]

Ce formulaire permet d'afficher les modifications apportées par rapport à l'index (zone de transfert pour la prochaine validation). En d'autres termes, les différences sont ce que vous pourrait dites à git d'ajouter plus à l'index, mais vous ne l'avez pas encore. Vous pouvez organiser ces changements en utilisant git-add (1).

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


1694
2017-10-19 09:57


origine


Réponses:


Cela devrait juste être:

git diff --cached

--cached signifie montrer les changements dans le cache / index (c'est-à-dire les changements par étapes) par rapport au courant HEAD. --staged est synonyme de --cached.

--staged et --cached ne pointe pas vers HEAD, juste différence par rapport à HEAD. Si vous choisissez ce qu'il faut commettre git add --patch (ou git add -p), --staged retournera ce qui est mis en scène.


2095
2017-10-19 10:07



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 --cache

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

git diff HEAD

Affiche tous les changements entre le répertoire de travail et HEAD (qui inclut les changements dans l'index). Cela montre tous les changements depuis la dernière validation, qu'ils aient été ou non mis en scène pour validation.

Aussi:

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


1410
2017-10-24 21:05



Si vous êtes intéressé par une vue visuelle côte à côte, le diffuser outil visuel diff peut le faire. Il affichera même trois volets si certains, mais pas tous, sont mis en scène. Dans le cas des conflits, il y aura même quatre volets.

Screenshot of diffuse with staged and unstaged edits

Invoque-le avec

diffuse -m

dans votre copie de travail Git.

Si vous me demandez, le meilleur visuel différent que j'ai vu depuis une décennie. En outre, il n'est pas spécifique à Git: il interagit avec une pléthore d'autres VCS, y compris SVN, Mercurial, Bazaar, ...

Voir également: Montrer à la fois mis en scène et travailler l'arbre dans git diff?


51
2018-03-18 07:22



Notez que git status -v  aussi montre les changements mis en scène! (ce qui signifie que vous devez avoir mis en scène - git add -- quelques changements. Pas de changements par étapes, pas de différence avec git status -v.
Ça fait ça depuis Git 1.2.0, février 2006)

Dans sa forme longue (par défaut), git status a une option "verbose" non documentée qui affiche réellement le diff entre HEAD et index.

Et il est sur le point de devenir encore plus complet: voir "Montrer à la fois mis en scène et travailler l'arbre dans git diff?"(git 2.3.4+, Q2 2015):

git status -v -v

37
2017-08-31 10:05



Vous pouvez utiliser cette commande.

git diff --cached --name-only

le --cachedoption de git diff moyens d'obtenir des fichiers mis en scène, et le --name-only option signifie obtenir uniquement les noms des fichiers.


22
2017-07-19 17:39



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

git diff --staged

14
2017-08-14 23:33



UTILISATION D'UN OUTIL DIFF VISUEL

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

Les meilleures réponses ici montrent correctement comment afficher les changements mis en cache / mis en scène dans le Index:

$ git diff --cached

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


Lancement de l'outil Visual Diff à la place

La réponse par défaut crachera les changements de diff au bash git (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 par étapes, il existe un script disponible dans git qui lance un outil de comparaison visuel pour chaque fichier affiché plutôt que de les afficher sur la ligne de commande, appelé difftool:

$ git difftool --staged

Cela fera la même chose que git diff --staged, sauf à chaque fois que l'outil de comparaison est exécuté (c'est-à-dire chaque fois qu'un fichier est traité par diff), il lance l'outil de comparaison visuelle par défaut (dans mon environnement, c'est kdiff3).

Après le lancement de l'outil, le script git diff se met en pause jusqu'à ce que votre outil visuel diff soit fermé. Par conséquent, vous devrez fermer chaque fichier pour voir le suivant.


Vous pouvez toujours utiliser difftool au lieu de diff dans les commandes git

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

Par exemple, pour lancer l'outil Visual Diff sans demander si vous voulez le faire pour chaque fichier, ajoutez le -y option (je pense habituellement que vous voudrez ceci !!):

$ git difftool -y --staged

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

Ou pour 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 man:

$ git difftool --help


Configuration de l'outil Visual Git

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

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

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


10
2018-03-14 14:30



Si vous avez plus d'un fichier avec des modifications par étapes, il peut être plus pratique d'utiliser git add -i, puis sélectionnez 6: diff, et enfin choisir le fichier (s) qui vous intéresse.


7
2017-10-14 18:32



Si vos intentions sont de cibler une branche repo distante et que votre première passe dans un journal de modification de commit était incomplète, vous pouvez corriger l'instruction commit avant de pousser comme ceci.

Localement

... faites quelques changements ...

git diff # look at unstaged changes

git commit -am"partial description of changes"

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

git diff origine / maître # regarde les mises en scène mais pas les changements

... modifier une déclaration de validation par étapes ...

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

git push

7
2018-02-25 21:16



Pour la comparaison de la zone intermédiaire et du référentiel

$git diff --staged

Pour utiliser la comparaison de travail vs référentiel

$ git diff 

mais si un fichier est modifié et ajouté à la zone de mise en attente ($ git add fileName) et nous essayons de voir la différence avec ( $ git diff). Il ne renverra aucune différence puisque le fichier est dans la zone de transfert et il ne sera pas comparé avec le référentiel.


7
2017-11-20 06:30



Par défaut git diff est utilisé pour montrer les changements qui ne sont pas ajoutés à la liste des fichiers git mis à jour. Mais si vous voulez montrer les changements qui sont ajoutés ou signalés, vous devez fournir des options supplémentaires qui permettront à git de savoir que vous êtes intéressé par les fichiers stagged ou ajoutés 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 par défaut 'git diff' .Vous devez faire comme ceci: -

$ 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;

4
2018-04-13 14:31