Git
Reflog - Herstellen van commits niet getoond in git log
Zoeken…
Opmerkingen
Git's reflog registreert de positie van HEAD (de ref voor de huidige status van de repository) elke keer dat deze wordt gewijzigd. Over het algemeen omvat elke operatie die destructief kan zijn de HEAD-aanwijzer verplaatsen (omdat als er iets wordt gewijzigd, inclusief in het verleden, de hash van de tip commit zal veranderen), dus het is altijd mogelijk om terug te keren naar een oudere status, vóór een gevaarlijke operatie , door de juiste regel in de reflog te vinden.
Objecten waarnaar door geen enkele referentie wordt verwezen, worden meestal binnen 30 dagen verzameld. Het is echter mogelijk dat de reflog niet altijd kan helpen.
Herstellen van een slechte rebase
Stel dat u een interactieve rebase bent gestart:
git rebase --interactive HEAD~20
en per ongeluk heb je enkele commits geplet of laten vallen die je niet wilde verliezen, maar voltooide je de rebase. Om te herstellen, doe je git reflog
, en je zou wat output als dit kunnen zien:
aaaaaaa HEAD@{0} rebase -i (finish): returning to refs/head/master
bbbbbbb HEAD@{1} rebase -i (squash): Fix parse error
...
ccccccc HEAD@{n} rebase -i (start): checkout HEAD~20
ddddddd HEAD@{n+1} ...
...
In dit geval is de laatste commit, ddddddd
(of HEAD@{n+1}
) het topje van je pre-rebase branch. Dus om die commit te herstellen (en alle ouder commits, inclusief die welke per ongeluk zijn geplet of laten vallen), doe je:
$ git checkout HEAD@{n+1}
Je kunt dan een nieuwe branch maken bij die commit met git checkout -b [branch]
. Zie Vertakken voor meer informatie.