Si vous utilisez GitHub pour l'emplacement cloud de votre référentiel, c'est très simple: accédez à votre projet et cliquez sur la rubrique "commits" dans le tableau qui affiche votre projet
David Lundquist
1
La signification de «version actuelle et dernière» devrait vraiment être clarifiée dans la question.
faintsignal
Réponses:
1171
Je ne comprends pas vraiment le sens de "dernière version".
Comme le commit précédent est accessible avec HEAD ^, je pense que vous cherchez quelque chose comme:
git diff HEAD^ HEAD
Depuis Git 1.8.5, @est un alias pour HEAD, vous pouvez donc utiliser:
git diff @~..@
Les éléments suivants fonctionneront également:
git show
Si vous voulez connaître la différence entre head et n'importe quel commit, vous pouvez utiliser:
git diff commit_id HEAD
Et cela lancera votre outil de diff visuel (s'il est configuré):
git difftool HEAD^ HEAD
Étant donné que la comparaison avec HEAD est par défaut, vous pouvez l'omettre (comme indiqué par Orient ):
git diff @^
git diff HEAD^
git diff commit_id
Avertissements
@ScottF et @Panzercrisis expliquent dans les commentaires que sous Windows le ~caractère doit être utilisé à la place de ^.
Je voulais quelque chose comme la version engagée et la version avant elle ... git diff head head-1
Rajeev
7
Depuis Git 1.8.5, @est un alias pour HEAD. Et puisque ~et ^sont les mêmes lorsque l'on ne revient qu'à un seul commit, je trouve git diff @~..@beaucoup plus facile à taper.
Andrew
80
@Andrew git showest encore plus facile, car @~..@c'est la chose par défaut à afficher.
amalloy
3
git showimprime simplement le message de validation, il ne génère pas de différence des modifications spécifiques, au moins dans Git 2.5.4 (Apple Git-61), ce ne serait donc pas une réponse à la question de l'OP.
user1944491
1
Le problème git showest que si HEADest un commit de fusion, vous n'obtiendrez pas ce que vous attendez car le commit de fusion lui-même peut ne pas avoir de changements lui-même. git diff HEAD^ HEADmontrera les changements réels entre les versions
RubenLaguna
158
En supposant que «version actuelle» est le répertoire de travail (modifications non validées) et «dernière version» est HEAD(dernières modifications validées pour la branche actuelle), faites simplement
git diff HEAD
Le crédit pour ce qui suit va à l'utilisateur Cerran.
Et si vous sautez toujours la zone de transit -alorsque vous vous engagez, vous pouvez simplement utiliser git diff.
Sommaire
git diff affiche les modifications non mises en scène.
git diff --cached montre les changements par étapes.
git diff HEAD affiche toutes les modifications (échelonnées et non échelonnées).
Et si vous sautez toujours la zone de transit -alorsque vous vous engagez, vous pouvez simplement utiliser git diff. <1> git diffaffiche les modifications non mises en scène . <2> git diff --cachedmontre les changements par étapes . <3> git diff HEADaffiche toutes les modifications (échelonnées et non échelonnées). Source: git-diff (1) Page du manuel
Cerran
1
Cela devrait être la réponse acceptée car elle répond à l'intention de la question.
tgoneil
Quel est le nom de "la version actuelle non mise en scène" dans git? Y a-t-il vraiment un nom?
Mathieu CAROFF
118
Comme indiqué sur un commentaire par amalloy , si par "versions actuelles et dernières" vous voulez dire le dernier commit et le commit avant cela, vous pouvez simplement utiliser
Utilisez cette option git show HEAD~1pour afficher la dernière validation, et git show HEAD~2, etc. pour les anciennes validations . Afficher un seul fichier via git show HEAD~2 my_file.
Florian Brucker
60
Différence entre le dernier mais un commit et le dernier commit (plus l'état actuel, le cas échéant):
git diff HEAD~
ou même (plus facile à taper)
git diff @~
où @est le synonim HEADde la branche courante et ~signifie "donnez-moi le parent de la révision mentionnée".
J'aime bien git diff HEAD^(plutôt que la HEAD~forme équivalente ). C'est un peu plus facile à retenir pour un "vieux con" comme moi ;-)
sxc731
3
La carotte est un problème dans certains terminaux. Agréable d'avoir l'option
light24bulbs
1
La réponse pourrait être améliorée en expliquant ce ~que @signifient et signifient.
Bob Stein
1
Si nous voulons simplement vérifier ce qui est validé lors de la dernière validation, ne l'utilisez pas (car les changements sales affectent le diff). Une syntaxe plus courte diff HEAD^ HEADdevrait vraiment l' être git diff @^!. Voir git-scm.com/docs/gitrevisions pourr1^!
Johnny Wong
@JohnnyWong Merci pour la clarification. J'ai mentionné "l'état actuel" pour ne pas confondre les lecteurs.
Tomilov Anatoliy
53
Vous pouvez aussi le faire de cette façon:
Comparer avec le commit précédent
git diff --name-status HEAD~1..HEAD
Comparer avec les deux validations actuelles et précédentes
Tout d'abord, utilisez " git log" pour répertorier les journaux du référentiel.
Maintenant, sélectionnez les deux ID de validation, relatifs aux deux validations. Vous voulez voir les différences ( exemple - Top commit le plus et certains commit plus ancien (selon votre attente de la version actuelle et une ancienne version) ).
Je compare un fichier de n'importe quelle version de son histoire (comme SVN ).
Menu Explorateur de projets → Fichier → clic droit → Équipe → Afficher dans l'historique .
Cela apportera l'historique de toutes les modifications sur ce fichier. Maintenant, Ctrlcliquez sur et sélectionnez deux versions → "Comparer les unes aux autres" .
Cela fonctionnera également pour les balises (supprimez le 'uniq' ci-dessous et d'autres parties si vous avez besoin de voir toutes les modifications):
git diff v1.58 HEAD
Ce qui suit est le même, et cela pourrait être utile pour l'intégration continue (CI) pour les microservices dans un référentiel monolithique:
Réponses:
Je ne comprends pas vraiment le sens de "dernière version".
Comme le commit précédent est accessible avec HEAD ^, je pense que vous cherchez quelque chose comme:
Depuis Git 1.8.5,
@
est un alias pourHEAD
, vous pouvez donc utiliser:Les éléments suivants fonctionneront également:
Si vous voulez connaître la différence entre head et n'importe quel commit, vous pouvez utiliser:
Et cela lancera votre outil de diff visuel (s'il est configuré):
Étant donné que la comparaison avec HEAD est par défaut, vous pouvez l'omettre (comme indiqué par Orient ):
Avertissements
~
caractère doit être utilisé à la place de^
.la source
@
est un alias pourHEAD
. Et puisque~
et^
sont les mêmes lorsque l'on ne revient qu'à un seul commit, je trouvegit diff @~..@
beaucoup plus facile à taper.git show
est encore plus facile, car@~..@
c'est la chose par défaut à afficher.git show
imprime simplement le message de validation, il ne génère pas de différence des modifications spécifiques, au moins dans Git 2.5.4 (Apple Git-61), ce ne serait donc pas une réponse à la question de l'OP.git show
est que siHEAD
est un commit de fusion, vous n'obtiendrez pas ce que vous attendez car le commit de fusion lui-même peut ne pas avoir de changements lui-même.git diff HEAD^ HEAD
montrera les changements réels entre les versionsEn supposant que «version actuelle» est le répertoire de travail (modifications non validées) et «dernière version» est
HEAD
(dernières modifications validées pour la branche actuelle), faites simplementLe crédit pour ce qui suit va à l'utilisateur
Cerran
.Et si vous sautez toujours la zone de transit
-a
lorsque vous vous engagez, vous pouvez simplement utilisergit diff
.Sommaire
git diff
affiche les modifications non mises en scène.git diff --cached
montre les changements par étapes.git diff HEAD
affiche toutes les modifications (échelonnées et non échelonnées).Source: git-diff (1) Page du manuel - Cerran
la source
-a
lorsque vous vous engagez, vous pouvez simplement utilisergit diff
. <1>git diff
affiche les modifications non mises en scène . <2>git diff --cached
montre les changements par étapes . <3>git diff HEAD
affiche toutes les modifications (échelonnées et non échelonnées). Source: git-diff (1) Page du manuelComme indiqué sur un commentaire par amalloy , si par "versions actuelles et dernières" vous voulez dire le dernier commit et le commit avant cela, vous pouvez simplement utiliser
la source
git show HEAD~1
pour afficher la dernière validation, etgit show HEAD~2
, etc. pour les anciennes validations . Afficher un seul fichier viagit show HEAD~2 my_file
.Différence entre le dernier mais un commit et le dernier commit (plus l'état actuel, le cas échéant):
ou même (plus facile à taper)
où
@
est le synonimHEAD
de la branche courante et~
signifie "donnez-moi le parent de la révision mentionnée".la source
git diff HEAD^
(plutôt que laHEAD~
forme équivalente ). C'est un peu plus facile à retenir pour un "vieux con" comme moi ;-)~
que@
signifient et signifient.diff HEAD^ HEAD
devrait vraiment l' êtregit diff @^!
. Voir git-scm.com/docs/gitrevisions pourr1^!
Vous pouvez aussi le faire de cette façon:
Comparer avec le commit précédent
Comparer avec les deux validations actuelles et précédentes
la source
Utilisez simplement le
cached
drapeau si vous avez ajouté, mais ne vous êtes pas encore engagé:la source
Rapide et simple, en supposant que vous êtes dans le maître:
Exemple:
la source
Tout d'abord, utilisez "
git log
" pour répertorier les journaux du référentiel.Maintenant, sélectionnez les deux ID de validation, relatifs aux deux validations. Vous voulez voir les différences ( exemple - Top commit le plus et certains commit plus ancien (selon votre attente de la version actuelle et une ancienne version) ).
Ensuite, utilisez:
ou
la source
Si la validation supérieure est pointée par HEAD, vous pouvez faire quelque chose comme ceci:
Différence entre le premier et le deuxième commit:
Différence entre le premier et le troisième commit:
Différence entre le deuxième et le troisième commit:
Etc...
la source
J'utilise Bitbucket avec l' IDE Eclipse avec le plugin Eclipse EGit installé.
Je compare un fichier de n'importe quelle version de son histoire (comme SVN ).
Menu Explorateur de projets → Fichier → clic droit → Équipe → Afficher dans l'historique .
Cela apportera l'historique de toutes les modifications sur ce fichier. Maintenant, Ctrlcliquez sur et sélectionnez deux versions → "Comparer les unes aux autres" .
la source
Cela fonctionnera également pour les balises (supprimez le 'uniq' ci-dessous et d'autres parties si vous avez besoin de voir toutes les modifications):
Ce qui suit est le même, et cela pourrait être utile pour l'intégration continue (CI) pour les microservices dans un référentiel monolithique:
(Crédit - https://dzone.com/articles/build-test-and-deploy-apps-independently-from-a-mo )
la source