Réponses:
Tu peux faire:
git diff master~20:pom.xml pom.xml
... pour comparer votre courant pom.xml
à celui d'il y a master
20 révisions par le premier parent. Vous pouvez master~20
, bien sûr, remplacer le nom d'objet (SHA1sum) d'une validation ou l'une des nombreuses autres façons de spécifier une révision .
Notez qu'il s'agit en fait de comparer l'ancienne pom.xml
à la version de votre arborescence de travail, et non la version validée dans master
. Si vous le souhaitez, vous pouvez effectuer les opérations suivantes à la place:
git diff master~20:pom.xml master:pom.xml
git diff <revision> <path>
Par exemple:
git diff b0d14a4 foobar.txt
git diff <revision> root/path/file
.
Si vous voulez voir la différence entre le dernier commit d'un seul fichier, vous pouvez le faire:
git log -p -1 filename
Cela vous donnera la différence du fichier dans git, ne compare pas votre fichier local.
-1
étape par étape jusqu'à ce que vous obteniez les modifications.
gitlog () { git log -${3:-p} -${2:-1} $1; }
utilisée comme: gitlog Rakefile
ou gitlog Rakefile 5
et gitlog Rakefile 10 s
. Le premier montre un diff; le second montre cinq diffs; le troisième en montre dix --no-patch
.
Pour voir ce qui a été changé dans un fichier lors du dernier commit:
git diff HEAD~1 path/to/file.
Vous pouvez changer le nombre (~ 1) au n-ème commit avec lequel vous souhaitez faire la différence.
HEAD~1
est substitué <revision>
, ce qui fait de cette réponse un doublon.
Syntaxe générique:
$git diff oldCommit..newCommit -- **FileName.xml > ~/diff.txt
pour tous les fichiers nommés "FileName.xml" n'importe où dans votre référentiel.
Notez l'espace entre "-" et "**"
Répondez à votre question:
$git checkout master
$git diff oldCommit..HEAD -- **pom.xml
or
$git diff oldCommit..HEAD -- relative/path/to/pom.xml
comme toujours avec git, vous pouvez utiliser une balise / sha1 / "HEAD ^" pour identifier un commit.
Testé avec git 1.9.1 sur Ubuntu.
Si aucun commit n'est votre HEAD, l' expansion de l'accolade de bash s'avère vraiment utile, surtout si vos noms de fichiers sont longs, l'exemple ci-dessus:
git diff master~20:pom.xml master:pom.xml
Deviendrait
git diff {master~20,master}:pom.xml
En savoir plus sur l' expansion de Brace avec bash.
Pour comparer à 5, validez avec l'actuel, les deux activés master
, faites simplement:
git diff master~5:pom.xml master:pom.xml
Vous pouvez également vous référer au numéro de hachage de validation, par exemple si le numéro de hachage est x110bd64
, vous pouvez faire quelque chose comme ça pour voir la différence:
git diff x110bd64 pom.xml
git diff -w HEAD origin / master path / to / file
git diff master~20 -- pom.xml
Fonctionne si vous n'êtes pas trop dans la branche principale.
Si vous êtes d'accord avec un outil graphique (ou même le préférez), vous pouvez:
gitk pom.xml
Dans gitk, vous pouvez ensuite cliquer sur n'importe quel commit (pour le "sélectionner") et cliquer avec le bouton droit sur n'importe quel autre commit pour sélectionner "Diff this -> selected" ou "Diff selected -> this" dans le menu contextuel, selon l'ordre que vous préférez.
Pour les personnes intéressées à faire de même depuis GitHub, voir comparer les validations dans le temps .
Si vous avez besoin de diff sur un seul fichier dans une cachette par exemple, vous pouvez le faire
git diff stash@{0} -- path/to/file
Si vous recherchez le diff sur un commit spécifique et que vous souhaitez utiliser l'interface utilisateur de github au lieu de la ligne de commande (par exemple, vous voulez le lier à d'autres personnes), vous pouvez faire:
https://github.com/<org>/<repo>/commit/<commit-sha>/<path-to-file>
Par exemple:
Notez les liens Précédent et Suivant en haut à droite qui vous permettent de parcourir tous les fichiers du commit.
Cela ne fonctionne que pour un commit spécifique, pas pour comparer entre deux versions arbitraires.
git diff <revision>:foo/ HEAD:foo/
.