Quelles sont les différences entre ces commandes git diff?

Quelles sont les différences entre les commandes git suivantes?

  1. git diff HEAD
  2. git diff HEAD^
  3. git diff --cached ou le synonyme git diff --staged
  4. git diff

  1. git diff HEAD – Montre ce qui a changé depuis le dernier commit.
  2. git diff HEAD^ – Affiche ce qui a changé depuis la validation avant la dernière validation.
  3. git diff --cached – Affiche ce qui a été ajouté à l’index via git add mais pas encore validé.
  4. git diff – Affiche ce qui a changé mais n’a pas encore été ajouté à l’index via git add .

Cela ressemble à ceci:

  Working Directory <----+--------+------+ | | | | | | | | V | | | "git add" | | | | diff | | | | | | V | | | Index <----+ diff HEAD | | | | | | | | | V | | | "git commit" | | | | diff --cached | | | diff --staged | | V | | | HEAD <----+--------+ | | | | diff HEAD^ V | previous "git commit" | | | | | V | HEAD^ <--------------------+ 

Du livre de la communauté Git :

git diff

affichera les modifications du répertoire de travail qui ne sont pas encore organisées pour le prochain commit.

git diff --cached

vous montrera la différence entre l’index et votre dernier commit; ce que vous commettez si vous lancez “git commit” sans l’option “-a”.

git diff HEAD

affiche les modifications dans le répertoire de travail depuis votre dernier commit; ce que vous commettez si vous lancez “git commit -a”.

  1. git diff HEAD : Diff entre HEAD et le répertoire de travail.
  2. git diff HEAD^ : Diff entre l’ancêtre direct de HEAD et le répertoire de travail.
  3. git diff --cached ou le synonyme git diff --staged : Diff entre HEAD et l’index.
  4. git diff : Diff entre l’index et le répertoire de travail.

Voici un moyen simple de mémoriser ces commandes:

  • Par défaut, la source de git diff est supposée être le répertoire de travail et sa cible est l’index.
  • L’ajout de l’indicateur --cached modifie la source en tant qu’index. Cela ne change pas nécessairement la cible une fois que vous ajoutez plus d’arguments. Mais pour plus de commodité, la cible devient la dernière validation si aucune n’est fournie.
  • L’ajout d’une validation en tant qu’argument modifie la cible.
  • L’ajout de deux commits en tant qu’arguments modifie la source et la cible, respectivement.

Amusez-vous à les mélanger à votre guise 🙂

HEAD est le pointeur HEAD actuel dans l’arborescence, HEAD^ est le commit avant HEAD . --cached Je ne suis pas sûr --cached vous montrera toutes les modifications que vous avez apscopes mais que vous n’avez pas ajoutées à l’index.

Le tutoriel git sur kernal.org est une très bonne lecture.