Comment puis-je voir ce qui a changé dans un fichier avant de m'engager sur git?

351

J'ai remarqué qu'en travaillant sur un ou deux billets, si je m'éloigne, je ne suis pas sûr de ce sur quoi j'ai travaillé, de ce qui a changé, etc.

Existe-t-il un moyen de voir les modifications apportées pour un fichier donné avant git add puis git commit?

Timothy T.
la source

Réponses:

525

Vous cherchez git diff. Selon votre situation exacte, il existe trois façons utiles de l'utiliser:

# show differences between index and working tree
# that is, changes you haven't staged to commit
git diff [filename]
# show differences between current commit and index
# that is, what you're about to commit
# --staged does exactly the same thing, use what you like
git diff --cached [filename]
# show differences between current commit and working tree
git diff HEAD [filename]

Cela fonctionnera récursivement sur les répertoires, et si aucun chemin n'est indiqué, il affiche toutes les modifications.

Cascabel
la source
1
@ sveilleux2 Non, lancez juste git diff sans aucun argument - comme le dit la dernière phrase de la réponse, si aucun chemin n'est donné, il montre toutes les modifications. (Les crochets [filename]indiquent un argument facultatif.) Avec le *vous laissez le shell lister tous les fichiers, donc si vous êtes dans un sous-répertoire, vous n'aurez que des choses dans ce sous-répertoire (pas le repo entier), et vous ' ll manquera des changements dans les fichiers cachés.
Cascabel
# afficher les différences entre la validation actuelle et l'index # c'est-à-dire ce que vous êtes sur le point de valider git diff --cached [nom de fichier] à pousser ? git diff --cached [nom de fichier]
ofarooq
3
Pour voir les différences faites après l'ajout d'un fichier (c'est-à-dire après "git add"), faites "git diff --staged [filename]"
Sidtharthan
Oh, pourquoi c'est si compliqué?! Et si nous avons une douzaine de fichiers? .. Se plaindre de l'interface git ... Ouais, semble-t-il, git add -pest une alternative pour inspecter tous les fichiers.
Kirby
@Jefromi - veuillez envisager d'ajouter git diff --staged [filename]votre réponse principale car il s'agit d'une situation plus souvent nécessaire.
Lazarus Thurston
39

Utilisation git-diff:

git diff yourfile
Felix Kling
la source
8

Pour moi, git add -pc'est le moyen le plus utile (et destiné à mon avis par les développeurs de git?) À passer en revue toutes les modifications non mises en scène (il montre le diff pour chaque fichier), choisissez un bon ensemble de modifications qui devraient aller avec une validation, puis lorsque vous avez tous ces éléments, puis utilisez git commitet répétez l'opération pour le prochain commit. Ensuite, vous pouvez faire de chaque commit un ensemble de modifications utiles ou significatives même si elles ont eu lieu dans différents fichiers. Je suggérerais également de créer une nouvelle branche pour chaque ticket ou activité similaire, et de basculer entre eux en utilisant checkout(peut-être en utilisant git stashsi vous ne voulez pas vous engager avant de changer), bien que si vous effectuez de nombreux changements rapides, cela peut être pénible. N'oubliez pas de fusionner souvent.

Haies de roseaux
la source
Donc, au lieu de git ajouter un nom de fichier, utilisez git add -p?
Timothy T.
1
git add -p est une combinaison de staging, de voir les changements que vous pouvez mettre en scène et de les sélectionner un par un de manière interactive. Voir Valider seulement une partie d'un fichier dans Git pour plus d'informations sur git add -p.
Angelos Asonitis
5

git diff

Afficher les modifications entre l'arborescence de travail et l'index ou une arborescence, les modifications entre l'index et une arborescence, les modifications entre deux arborescences ou les modifications entre deux fichiers sur le disque.

miku
la source
La citation est un peu trop - par défaut, elle effectue la première comparaison: entre l'arbre de travail et l'index.
Cascabel
4

N'oubliez pas que vous effectuez des modifications , pas des fichiers.

Pour cette raison, il est très rare que je n'utilise pas git add -p(ou l'équivalent magit) pour ajouter mes modifications.

Dustin
la source
2
git ne gère PAS les changements - essayer d'y penser comme si c'était le cas est la principale source de confusion et d'erreurs. git traite des instantanés.
Chris Dodd
3
git diff <path>/filename

chemin peut être votre chemin système complet jusqu'au fichier ou
si vous êtes dans le projet, vous collez le chemin du fichier modifié également
pour les fichiers modifiés avec utilisation du chemin:git status

HariKishore
la source
2

Eh bien, mon cas lorsque vous ne voulez pas vous soucier de la liste des fichiers. Montrez-les tous.

Lorsque vous avez déjà exécuté git addvotre liste de fichiers:

$ git diff --cached $(git diff --cached --name-only)

Dans les versions plus récentes de git, vous pouvez --stagedégalement utiliser , qui est un synonyme de --cached.

La même chose peut être utilisée pour les fichiers non ajoutés mais sans --cachedoption.

$ git diff $(git diff --name-only)

Alias ​​de commande Git pour l'option "en cache":

$ git config --global alias.diff-cached '!git diff --cached $(git diff --cached --name-only)'
Kirby
la source
3
Merci pour les détails git diff --cached --name-only était la commande que je cherchais ....
Doogle
1

Accédez à votre dépôt git respectif, puis exécutez la commande ci-dessous:

git diff filename

Il ouvrira le fichier avec les modifications marquées, appuyez sur la touche Entrée / Retour pour faire défiler le fichier.

Le nom de fichier PS doit inclure le chemin complet du fichier, sinon vous pouvez exécuter sans le chemin complet du fichier en allant dans le répertoire / dossier respectif du fichier

Yash Bansal
la source
0

Vous pouvez également utiliser un éditeur de texte convivial pour git. Ils affichent des couleurs sur les lignes qui ont été modifiées, une autre couleur pour les lignes ajoutées, une autre couleur pour les lignes supprimées, etc.

Un bon éditeur de texte qui fait cela est Atom 1.0 de GitHub .

AskYous
la source