Comment revenir à la dernière validation dans l'histoire après avoir utilisé git reset pour aller à un plus changeset?
Question
Supposons que mon histoire va de cette façon:
A - B - C - D (maître)
Si je fais git reset B
, je suis arrivé:
A - B (maître)
Le problème est, git log
maintenant me montrer que l'histoire de A à B, et je ne peux pas voir C et D plus.
Comment puis-je revenir à D?
La solution
Vous devriez pouvoir voir D avec git reflog
.
Voir cette par exemple .
La seule fois commits sont supprimés est en fait si vous git gc --prune (donc faîtes attention à celui-là!).
Si vous exécutez reflog git en ce moment dans un dépôt que vous avez travaillé, vous verrez beaucoup de changements qui ressemblent à ceci:
c5c3a82... HEAD@{0}: pull origin featureB: Merge made by recursive.
49d0608... HEAD@{1}: reset --hard HEAD^: updating HEAD
3ed01b1... HEAD@{2}: pull origin featureA: Merge made by recursive.
49d0608... HEAD@{3}: pull origin bugfixJ: Merge made by recursive.
854d44e... HEAD@{4}: commit: Add more cowbell to foo.c
6dbc22d... HEAD@{5}: pull origin bugfixI: Merge made by recursive.
9bdb763... HEAD@{6}: commit: Remove weevils
8518f9d... HEAD@{7}: checkout: moving from wickedfeature to master
Ces lignes peuvent être répartis en 4 parties:
- commit hachage,
- pointeur commit,
- action
- et informations supplémentaires.
Si nous voulions récupérer le commettras qui a été perdu à
HEAD@{1}
, nous pouvionsgit reset --hard HEAD@{2}
.
Maintenant, notre branche courante (et copie de travail) sont mis à l'état référentiel avant nous la remise à zéro.Si nous voulions voir exactement ce que cet état était, nous pourrions
git checkout -b temp HEAD@{2}
(ougit checkout HEAD@{2}
si vous avez git 1.5.0 et plus).
Autres conseils
Ok, trouvé.
Vous pouvez utiliser git reflog
.
Je ne savais pas ce qu'elle était, mais maintenant, je peux le voir est un journal de toutes les références HEAD ont été pointant.