Quand j'exécute "git pull", je veux souvent savoir ce qui a changé entre la dernière version d'un fichier et la nouvelle. Disons que je veux savoir ce que quelqu'un d'autre a engagé dans un dossier particulier.
Comment cela se fait-il?
Je suppose que c'est "git diff" avec quelques paramètres pour commit x versus commit y mais je n'arrive pas à obtenir la syntaxe. Je trouve également "git log" un peu déroutant et je ne sais pas où trouver l'ID de validation de ma dernière version du fichier par rapport à la nouvelle.
Réponses:
Il existe toutes sortes de façons merveilleuses de spécifier des commits - voir la section Spécification des révisions de
man git-rev-parse
pour plus de détails. Dans ce cas, vous souhaitez probablement:Le
@{1}
signifie "la position précédente de la référence que j'ai spécifiée", ce qui évalue ce que vous aviez extrait précédemment - juste avant le pull. Vous pouvez clouerHEAD
à la fin si vous avez également des changements dans votre arbre de travail et que vous ne voulez pas voir les différences pour eux.Je ne suis pas sûr de ce que vous demandez avec "l'ID de validation de ma dernière version du fichier" - l'ID de validation (hachage SHA1) est cet hexadécimal de 40 caractères situé juste en haut de chaque entrée dans la sortie de git log. C'est le hachage pour l'ensemble du commit, pas pour un fichier donné. Vous n’avez jamais vraiment besoin de plus - si vous voulez différencier un seul fichier à travers le pull, faites
C'est une chose générale - si vous voulez connaître l'état d'un fichier dans un commit donné, vous spécifiez le commit et le fichier, pas un ID / hachage spécifique au fichier.
la source
@{1}
comme raccourci pourHEAD@{1}
)J'aime utiliser:
Ou si je veux seulement diffèrent un fichier spécifique:
la source
HEAD^
est le commit parent, pas le commit avantpull
HEAD
est un commit de fusion,HEAD^
est le premier commit parent, donc oui, ça peut être le commit avant lepull
. Pour obtenir l'autre parent (pour une fusion bidirectionnelle), utilisezHEAD^2
. Mais alors, la réponse ci-dessus ne répond pas vraiment à la question en premier lieu, alors laissant le -1 ;-)Si vous faites une suite,
git pull
vous serez soit en avance rapide, soit fusionnerez un nombre inconnu de validations du référentiel distant. Cela se produit comme une seule action, donc le dernier commit auquel vous étiez juste avant le pull sera la dernière entrée dans le reflog et sera accessible en tant queHEAD@{1}
. Cela signifie que vous pouvez faire:Cependant, je recommanderais fortement que si c'est quelque chose que vous faites beaucoup, vous devriez simplement envisager de faire un
git fetch
et d'examiner la branche récupérée avant de la fusionner ou de la rebaser manuellement. Par exemple, si vous êtes sur master et que vous allez extraire origin / master:la source
git log
au lieu d'git diff
ici (même si la syntaxe est un peu incohérente entre le '..' pourgit log
et le '...' pourgit diff
;) +1 Voir stackoverflow.com/questions/53569/... et stackoverflow.com/questions / 850607 /…