Git
Reflog - Återställa åtaganden som inte visas i git-loggen
Sök…
Anmärkningar
Gits återloggning registrerar HEAD: s position (ref för det aktuella tillståndet i förvaret) varje gång det ändras. I allmänhet innebär varje operation som kan vara förstörande att flytta HEAD-pekaren (eftersom om något ändras, inklusive tidigare, kommer tip-commit-hash att förändras), så det är alltid möjligt att återgå till ett äldre tillstånd, före en farlig operation , genom att hitta rätt linje i refloggen.
Föremål som inte hänvisas till av någon ref är vanligtvis skräp som samlas in inom 30 dagar, så reflogen kanske inte alltid kan hjälpa.
Återhämtar sig från en dålig rebas
Anta att du hade startat en interaktiv rebas:
git rebase --interactive HEAD~20
och av misstag klämde du ner eller tappade några åtaganden som du inte ville förlora, men slutförde sedan rebasen. För att återhämta dig, gör git reflog
, och du kanske ser lite output som detta:
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} ...
...
I det här fallet är den senaste åtagandet, ddddddd
(eller HEAD@{n+1}
) toppen av din pre-rebase gren. Så, för att återhämta det åtagandet (och alla förälderåtaganden, inklusive de som oavsiktligt krossats eller tappats), gör du:
$ git checkout HEAD@{n+1}
Du kan sedan skapa en ny gren på det åtagande med git checkout -b [branch]
. Se filialer för mer information.