La page de manuel indique que le journal affiche les journaux de validation et que le gestionnaire de journalisation gère les informations de réécriture. En quoi consistent exactement les informations de reflog et que contient le journal? Le journal semble beaucoup plus détaillé.
git log
indique le HEAD actuel et son ascendance. En d'autres termes, il affiche les points de validation HEAD, puis son parent, son parent, etc. Il revient dans les origines du référentiel, en recherchant récursivement chaque parent du commit.
(Dans la pratique, certains commits ont plusieurs parents. Pour afficher un journal plus représentatif, utilisez une commande telle que git log --oneline --graph --decorate
.)
git reflog
ne traverse pas du tout les ancêtres de HEAD. Le refog est une liste ordonnée des commits sur lesquels HEAD a pointé: c'est l'historique d'annulation de votre repo. Le reflog ne fait pas partie du repo lui-même (il est stocké séparément dans les commits eux-mêmes) et n'est pas inclus dans les poussées, les extractions ou les clones; c'est purement local.
A part: comprendre le reflog signifie que vous ne pouvez pas vraiment perdre des données de votre repo une fois qu'elles ont été validées Si vous réinitialisez accidentellement un commit plus ancien ou si vous redéfinissez incorrectement votre base ou si vous effectuez une autre opération visuellement "supprime", vous pouvez utiliser le reflog pour voir où vous étiez auparavant et git reset --hard
revenir à cette référence pour restaurer votre état précédent. Rappelez-vous que les références impliquent non seulement le commit, mais toute l'histoire derrière celle-ci.
git log
affiche le journal de validation accessible depuis les références (têtes, balises, télécommandes).git reflog
est un record de tous les commits qui sont ou ont été référencés dans votre repo à tout moment.C'est pourquoi git reflog
(un enregistrement local élagué après 90 jours par défaut) est utilisé lorsque vous effectuez une opération "destructive" (comme supprimer une branche), afin de récupérer le SHA1 référencé par celui-ci. branche.
Voir git config
:
gc.reflogexpire
gc.<pattern>.reflogexpire
git reflog
expire supprime les entrées de reflogage antérieures à cette heure; par défaut à 90 jours.
Avec "<pattern>
" (par exemple, "refs/stash
") au milieu, le paramètre s'applique uniquement aux références correspondant au<pattern>
.
git reflog
est souvent référencé comme " votre filet de sécurité } _"
En cas de problème, le conseil général, lorsque git log ne vous indique pas ce que vous recherchez, est le suivant:
Encore une fois, reflog est un enregistrement local de votre SHA1.
Contrairement à git log
: si vous placez votre référentiel dans un référentiel amont , vous verrez le même git log
, mais pas nécessairement le même git reflog
.
Voici l'explication de reflog
du livre Pro Git :
Une des choses que Git fait en arrière-plan pendant que vous travaillez est de garder un journal de bord - un journal où se trouvent vos HEAD et vos références de branche depuis quelques mois.
Vous pouvez voir votre refog en utilisant
git reflog
:$ git reflog 734713b... HEAD@{0}: commit: fixed refs handling, added gc auto, updated d921970... HEAD@{1}: merge phedders/rdocs: Merge made by recursive. 1c002dd... HEAD@{2}: commit: added some blame and merge stuff 1c36188... HEAD@{3}: rebase -i (squash): updating HEAD 95df984... HEAD@{4}: commit: # This is a combination of two commits. 1c36188... HEAD@{5}: rebase -i (squash): updating HEAD 7e05da5... HEAD@{6}: rebase -i (pick): updating HEAD
Chaque fois que le conseil de votre branche est mis à jour pour une raison quelconque, Git stocke ces informations pour vous dans cet historique temporaire. Et vous pouvez également spécifier des commits plus anciens avec ces données.
La commande reflog
peut également être utilisée pour supprimer des entrées ou expirer des entrées du journal de génération qui sont trop anciennes. Dans la documentation officielle du noyau Linux Git pour reflog
:
La sous-commande
expire
permet d'élaguer les anciennes entrées de reflog.Pour supprimer des entrées uniques du reflet, utilisez la sous-commande
delete
et spécifiez l'entrée exacte (par exemplegit reflog delete master@{2}
).
J'étais curieux à propos de cela aussi et je voulais juste élaborer et résumer un peu:
git log
affiche un historique de tous vos commits pour la branche sur laquelle vous vous trouvez. Passez à une branche différente et vous verrez un historique de validation différent. Si vous voulez voir l'historique de validation de toutes les branches, tapez git log --all
.
git reflog
montre un enregistrement de vos références, comme dit Cupcake. Il y a une entrée à chaque fois qu'un commit ou un checkout est fait. Essayez de basculer plusieurs fois entre deux branches à l’aide de git checkout
et exécutez git reflog
après chaque achat. Vous verrez l'entrée la plus récente mise à jour à chaque fois en tant qu'entrée "de paiement". Vous ne voyez pas ces types d'entrées dans git log
.
Références: http://www.lornajane.net/posts/2014/git-log-all-branches
En fait, reflog est un alias pour
git log -g --abbrev-commit --pretty=oneline
la réponse devrait donc être: c'est un cas spécifique.