J'ai mis en place quelques changements à engager; comment puis-je voir la différence de tous les fichiers qui sont mis en scène pour le prochain commit? Je connais l' état de git , 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 la page de manuel git-diff (1) indique
git diff [--options] [-] […]
Ce formulaire permet de visualiser les modifications que vous avez apportées par rapport à l'index (zone de transit pour la prochaine validation). En d'autres termes, les différences sont ce que vous pourriez dire à git d'ajouter à l'index, mais ce n'est toujours pas le cas. Vous pouvez mettre en scène ces modifications en utilisant git-add (1).
Malheureusement, je ne peux pas vraiment comprendre cela. Il doit y avoir une doublure pratique pour laquelle je pourrais créer un alias, non?
git status -v
fonctionne aussi. Voir ma réponse ciless
comme pour:git status -v | less
- morceaux gérables :)Réponses:
Cela devrait simplement être:
--cached
signifie montrer les changements dans le cache / index (c'est-à-dire les changements par étapes) par rapport au courantHEAD
.--staged
est synonyme de--cached
.--staged
et--cached
ne pointe pasHEAD
, juste différence par rapport àHEAD
. Si vous choisissez ce que vous souhaitez valider en utilisantgit add --patch
(ougit add -p
), vous--staged
retournerez ce qui est mis en scène.la source
git diff --name-only --cached
par publication sur stackoverflow.com/a/4525025/255187git difftool --staged
plutôt quegit diff --staged
pour lancer l'outil de comparaison visuelle par défaut sur chaque fichier.difftool
peut également être remplacédiff
par tout autre argument.git difftool --staged -d
pour différencier les deux répertoires dans un outil visuel plutôt qu'un fichier à la fois.git diff --cached -- <stagedfile>
Un graphique simple rend cela plus clair:
git diff
Affiche les changements entre le répertoire de travail et l'index. Cela montre ce qui a été modifié, mais n'est pas organisé pour une validation.
git diff --cached
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 organisé pour une validation.
git diff HEAD
Affiche toutes les modifications entre le répertoire de travail et HEAD (qui inclut les modifications dans l'index). Cela montre toutes les modifications depuis la dernière validation, qu'elles aient été ou non mises en scène pour la validation.
Aussi :
Il y a un peu plus de détails sur 365Git.
la source
foo.c
et n'effectuez pasgit add foo.c
, alorsfoo.c
n'est pas dans l'index ; il n'est pas organisé pour la validation. Sigit diff foo.c
naïvement comparé au fonctionnementfoo.c
de l'index, il faudrait alors montrer un diff géant entre un fichier vide / inexistant et le contenu entier defoo.c
. Donc en fait, quand un fichier n'existe pas dans l'index,git diff
se replie, pour ce fichier, sur l'utilisation duHEAD
copie.HEAD
sur lequel les modifications par étapes sont appliquées. N'oubliez pas que Git fonctionne en enregistrant les modifications et non en enregistrant des fichiers entiers. Lorsque vous mettez en scène un fichier, il ne stocke que les modifications apportées. Si l'index est vide comme vous le laissez entendre, il ne saura pas comment enregistrer les modifications dans l'index et devra enregistrer le fichier entier en tant que "nouvellement ajouté" - ce qui est faux.HEAD
auront la version inchangée dufoo.c
fichier (ce ne sont pas des copies physiques, mais juste des copies logiques pour vous et moi. Pour Git, ce sont juste le même flux de données auquel se réfère chaque commit qui a impliqué ce fichier. ). Donc, quand vous le faitesgit diff
sur une scène entièrement non mise en scène,foo.c
ce n'est pas vraimentHEAD
de faire le diff avec l'index (qui contient exactement la même version du fichier que leHEAD
fait). Le graphique est donc correct.git status -v
est équivalent àgit diff --cached
(plusgit status
bien sûr)Si vous êtes intéressé par une vue visuelle côte à côte, l' outil de diffusion visuelle diffuse peut le faire. Il affichera même trois volets si certaines modifications, mais pas toutes, sont mises en scène. En cas de conflit, il y aura même quatre volets.
Invoquez-le avec
dans votre copie de travail Git.
Si vous me demandez, le meilleur visuel que j'ai vu depuis une décennie. De plus, il n'est pas spécifique à Git: il interagit avec une pléthore d'autres VCS, notamment SVN, Mercurial, Bazaar, ...
Voir aussi: Afficher à la fois l'arborescence par étapes et de travail dans git diff?
la source
brew install diffuse
fonctionne sur OS X. N'affiche pas 3 volets si les modifications sont non échelonnées et échelonnées - vouliez-vous dire des changements qui ne figurent pas encore dans l'index?Notez que montre
git status -v
également les changements par étapes! (ce qui signifie que vous devez avoir mis en scène -git add
- quelques modifications. Aucune modification par étapes, aucun diff avecgit status -v
.Il le fait depuis Git 1.2.0, février 2006 )
Dans sa forme longue (par défaut),
git status
a une option "verbeuse" non documentée qui affiche en fait la différence entre HEAD et index.Et il est sur le point de devenir encore plus complet: voir " Afficher à la fois l'arborescence intermédiaire et de travail dans git diff? " (Git 2.3.4+, Q2 2015):
la source
git diff HEAD
git status -vv
comprend également ce quigit diff HEAD
fait.git version 1.8.3.1
. Je sais que c'est vieux, mais si possible, notez quand ce drapeau a été introduit.git status -v
est plus ancien ( github.com/git/git/commit/… , git 1.2.0, février 2006!). Notez qu'il affiche la différence entre l' index etHEAD
: si vous avez ajouté quelque chose à l'index (nongit add
), alorsgit status -v
il n'affichera aucune différence.git status -v -v
est plus récent (Git 2.3.4, mars 2015)git diff -v
.Vous pouvez utiliser cette commande.
L'
--cached
option degit diff
moyens pour obtenir des fichiers intermédiaires, et l'--name-only
option signifie d'obtenir uniquement les noms des fichiers.la source
--name-only
option, je pourrais aussi bien utiliser le réguliergit status
À partir de la version 1.7 et ultérieure, cela devrait être:
la source
UTILISATION D'UN OUTIL VISUEL DIFF
La réponse par défaut (sur la ligne de commande)
Les meilleures réponses ici montrent correctement comment afficher les modifications mises en cache / par étapes dans
Index
:ou
$ git diff --staged
qui est un alias.Lancer l'outil Visual Diff à la place
La réponse par défaut crachera les changements de diff au 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 intermédiaires, il existe un script disponible dans git qui lance un outil de comparaison visuelle pour chaque fichier consulté plutôt que de les afficher sur la ligne de commande, appelé
difftool
:Cela fera la même chose que
git diff --staged
, sauf chaque fois que l'outil de diff est exécuté (c'est-à-dire chaque fois qu'un fichier est traité par diff), il lancera l'outil de diff visuel par défaut (dans mon environnement, c'est kdiff3 ).Après le lancement de l'outil, le script git diff s'arrêtera jusqu'à ce que votre outil de diff visuel soit fermé. Par conséquent, vous devrez fermer chaque fichier pour voir le suivant.
Vous pouvez toujours utiliser
difftool
à la place dediff
commandes in gitPour tous vos besoins de diff visuels,
git difftool
fonctionnera à la place de toutgit diff
commande, y compris toutes les options.Par exemple, pour lancer l'outil de diff visuel sans demander s'il faut le faire pour chaque fichier, ajoutez l'
-y
option (je pense que généralement vous en aurez envie !!):Dans ce cas, il récupérera chaque fichier dans l'outil de diff visuel, un à la fois, en faisant apparaître le suivant après la fermeture de l'outil.
Ou pour regarder la différence d'un fichier particulier qui est mis en scène dans
Index
:Pour toutes les options, consultez la page de manuel:
Configuration de Visual Git Tool
Pour utiliser un outil visuel git autre que celui par défaut, utilisez l'
-t <tool>
option:Ou, consultez la page de manuel difftool pour savoir comment configurer git pour utiliser un autre outil de diff visuel par défaut.
Exemples d'
.gitconfig
entrées pour vscode comme outil de diff / fusionUne partie de la configuration d'un outil difft implique de modifier le
.gitconfig
fichier, soit via des commandes git qui le modifient en arrière-plan, soit en le modifiant directement.Vous pouvez le trouver
.gitconfig
dans votre répertoire personnel, comme sous~
Unix ou normalementc:\users\<username>
sous Windows).Ou, vous pouvez ouvrir l'utilisateur
.gitconfig
dans votre éditeur Git par défaut avecgit config -e --global
.Voici des exemples d'entrées dans mon utilisateur global
.gitconfig
pour VS Code en tant qu'outil de diff et outil de fusion:la source
Pour la comparaison entre la zone de transfert et le référentiel (dernière validation)
La commande compare vos
$ git add fileName
modifications staged ( ) à 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 par étapes à votre dernier commit.Pour la comparaison de travail et de mise en scène, utilisez
La commande compare ce qui se trouve dans votre répertoire de travail avec ce qui se trouve dans votre zone de transit. Il est important de noter que git diff en lui-même n'affiche pas toutes les modifications apportées depuis votre dernier commit - uniquement les modifications qui ne sont toujours pas mises en scène. Si vous avez mis en scène toutes vos modifications (
$ git add fileName
), git diff ne vous donnera aucune sortie.De plus, si vous mettez en scène un fichier (
$ git add fileName
) puis le modifiez, vous pouvez utiliser git diff pour voir les modifications du fichier qui sont mises en scène et les modifications qui ne le sont pas.la source
$ git diff
" . Je suis à peu près sûr degit diff
comparer entre Working vs Staging. Voir stackoverflow.com/a/1587952Si vous avez l'intention de cibler par push une branche de dépôt à distance et que votre première passe dans un journal des modifications de validation était incomplète, vous pouvez corriger l'instruction de validation avant de pousser comme ceci.
Localement
... apportez quelques modifications ...
... rappeler plus de changements non mentionnés dans commit ...
git diff origine / master # regarde les changements par étapes mais pas poussés
... modifier la déclaration de validation par étapes ...
la source
Si vous avez plus d'un fichier avec des modifications par étapes, il peut être plus pratique à utiliser
git add -i
, puis sélectionnez6: diff
et enfin choisissez le ou les fichiers qui vous intéressent.la source
Par défaut, git diff est utilisé pour afficher les modifications qui ne sont pas ajoutées à la liste des fichiers mis à jour git. Mais si vous souhaitez afficher les modifications ajoutées ou échelonnées, vous devez fournir des options supplémentaires qui permettront à git de savoir que vous êtes intéressé par les fichiers échelonnés ou ajoutés diff. .
Exemple
Une fois que vous avez ajouté les fichiers, vous ne pouvez pas utiliser la valeur par défaut de 'git diff'. Vous devez faire comme ceci: -
la source
git gui
etgit-cola
sont des utilitaires graphiques qui vous permettent de visualiser et de manipuler l'index. Les deux comprennent des différences visuelles simples pour les fichiers intermédiaires etgit-cola
peuvent également lancer un outil de différence visuelle côte à côte plus sophistiqué.Voir ma réponse étroitement liée à Comment supprimer un fichier de l'index dans git? , ainsi que ce catalogue officiel de Git - GUI Clients .
la source
Pensez également à l'
gitk
outil, fourni avec git et très utile pour voir les changementsla source