Поиск…


замечания

Рефлог Git записывает позицию HEAD (ref для текущего состояния репозитория) каждый раз, когда он изменяется. Как правило, каждая операция, которая может быть разрушительной, включает в себя перемещение указателя HEAD (поскольку, если что-либо изменится, в том числе и в прошлом, хэш хэша будет изменяться), поэтому всегда можно вернуться к более старому состоянию перед опасной операцией , найдя правильную линию в рефлоге.

Объекты, на которые не ссылаются никакие ссылки, обычно собирают мусор в течение ~ 30 дней, поэтому reflog не всегда может помочь.

Восстановление от плохой перестановки

Предположим, что вы начали интерактивную перезагрузку:

git rebase --interactive HEAD~20

и по ошибке вы раздавили или сбросили некоторые коммиты, которые вы не хотели потерять, но затем завершили перезагрузку. Чтобы восстановить, выполните git reflog , и вы можете увидеть некоторые результаты следующим образом:

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} ...
...

В этом случае последнее commit, ddddddd (или HEAD@{n+1} ) является верхушкой ветви pre-rebase . Таким образом, чтобы восстановить эту фиксацию (и все родительские коммиты, включая те, которые были случайно раздавлены или сброшены), выполните:

$ git checkout HEAD@{n+1}

Затем вы можете создать новую ветку при этом фиксации с помощью git checkout -b [branch] . Дополнительную информацию см. В разделе « Ветвление» .



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow