0Pricing
DevOps Bootcamp · Урок

Git Reflog и восстановление истории

Освойте `git reflog`, чтобы восстанавливать потерянные фиксации или ветки и иметь надёжную страховку для своей работы.

«Git Reflog и восстановление истории» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 4 уроков всего.

Что такое Git Reflog?

Случайно удалили ветку или сбросили изменения не к тому коммиту? Не паникуйте! В Git есть мощный механизм защиты — Reflog.

Reflog (журнал ссылок) — это запись о том, где находились HEAD и указатели веток в вашем локальном репозитории.

Как Reflog отслеживает историю

В отличие от истории коммитов (git log), которая отслеживает изменения в файлах проекта, reflog отслеживает изменения ссылок репозитория.

Каждый раз, когда перемещается ваш HEAD (текущий коммит) или указатель ветки, Git записывает это событие в reflog. Сюда входят:

  • Фиксация изменений
  • Переключение веток
  • Слияние или перебазирование
  • Выполнение сброса
  • Клонирование репозитория

Просмотр Reflog

Чтобы посмотреть reflog, достаточно использовать команду git reflog. Она показывает список действий и состояние HEAD в соответствующий момент.

Смоделируем несколько действий, а затем посмотрим reflog:

git init my_repo
cd my_repo

echo "First line" > file.txt
git add file.txt
git commit -m "Initial commit"

echo "Second line" >> file.txt
git add file.txt
git commit -m "Add second line"

git reflog

Разбор записей Reflog

Каждая запись reflog имеет определённый формат. Разберём типичную запись, которую можно увидеть:

a1b2c3d HEAD@{0}: commit: Add new feature

  • a1b2c3d: хеш SHA-1 коммита, на котором в тот момент находился HEAD.
  • HEAD@{0}: это «указатель записи reflog». @{0} — самое последнее состояние, @{1} — предыдущее, и так далее.
  • commit: Add new feature: описание действия, из-за которого переместился HEAD.

Эти указатели крайне важны для восстановления!

Сценарий: восстановление потерянного коммита

Представьте, что вы создали коммит, а затем случайно отменили его с помощью git reset --soft HEAD~1. Теперь этого коммита нет в истории текущей ветки, но он не исчез окончательно!

Reflog его помнит. Смоделируем эту распространённую ошибку:

git init my_project_recovery
cd my_project_recovery

echo "Initial content" > start.txt
git add start.txt
git commit -m "Initial commit"

echo "Important feature" > feature.txt
git add feature.txt
git commit -m "Added an important feature"

# Oops! Accidentally reset
git reset --soft HEAD~1

git reflog

Возвращение коммита

После сброса, если выполнить git reflog, вы увидите запись о коммите «Added an important feature», возможно, как HEAD@{1} или похожую запись.

Чтобы восстановить его, можно использовать git reset вместе с записью reflog. Например, если хеш потерянного коммита — abcdefg, а его запись reflog — HEAD@{1}:

# Assuming the lost commit was HEAD@{1} in the reflog
git reset --hard HEAD@{1}

# Or using the specific commit hash from reflog
# git reset --hard abcdefg

# Now, check your log. The commit is back!
git log --oneline

Сценарий: получение удалённой ветки

Что делать, если вы случайно удалили целую ветку до её слияния или решили, что она больше не нужна?

Ветки — это всего лишь указатели на коммиты. При удалении ветки коммиты, на которые она указывала, не удаляются из репозитория немедленно. Reflog по-прежнему помнит, где находился HEAD этой ветки!

Восстановление ветки из Reflog

Предположим, у вас была ветка с именем feature-x, вы работали в ней, а затем удалили её с помощью git branch -D feature-x.

При выполнении git reflog можно увидеть такую запись:

1234567 HEAD@{5}: branch: Created branch feature-x or
abcdefg HEAD@{2}: checkout: moving from feature-x to master

Используйте хеш коммита (например, 1234567 или abcdefg) из записи reflog, в которой ветка была активна, чтобы создать её заново:

# Assume 'feature-x' was deleted and its last commit was '1234567'

# Create a new branch pointing to that commit
git branch feature-x-recovered 1234567

# Now, check out your recovered branch
git checkout feature-x-recovered

# Verify its history
git log --oneline

Срок действия записей Reflog истекает

Хотя reflog — мощный механизм защиты, его записи не хранятся вечно. Через определённый период Git удаляет старые записи reflog.

  • По умолчанию срок действия достижимых записей (из текущего HEAD) истекает через 90 дней.
  • Срок действия недостижимых записей (например, записей удалённых веток или коммитов, на которые больше нет ссылок) истекает через 30 дней.

Поэтому «потерянную» работу лучше восстанавливать как можно скорее!

Задание на восстановление с помощью Reflog

Вы создали новую ветку для функции, сделали несколько коммитов, а затем случайно удалили её без слияния. Вы выполняете git reflog и видите такую запись:

...
c0ffee1 HEAD@{3}: commit: Implement new user profile page
bada55e HEAD@{4}: checkout: moving from feature/profile to main
...

Какая последовательность команд правильно создаст ветку feature/profile, указав её на последний коммит, который в ней находился до удаления?

Reflog: ваша защита в Git

Вы освоили git reflog — важный инструмент для восстановления «потерянной» работы в локальном репозитории Git. Запомните:

  • Он отслеживает, где находились HEAD и указатели веток.
  • Используйте git reflog, чтобы просматривать эту историю.
  • Коммиты и ветки можно восстановить с помощью git reset или git branch, указав записи reflog (HEAD@{n} или хеши коммитов).
  • Срок действия записей reflog истекает, поэтому действуйте быстро, если нужно что-то восстановить!

Поддерживайте историю Git в чистоте, но помните: reflog всегда готов помочь в экстренной ситуации!

Часто задаваемые вопросы

Урок «Git Reflog и восстановление истории» бесплатный?

Да — полный текст урока «Git Reflog и восстановление истории» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.

Чему я научусь в уроке «Git Reflog и восстановление истории»?

Освойте `git reflog`, чтобы восстанавливать потерянные фиксации или ветки и иметь надёжную страховку для своей работы. Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать DevOps Bootcamp?

Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Git Reflog и восстановление истории»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке DevOps Bootcamp?

Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Git Reflog и восстановление истории
  2. Git Bisect для отладки
  3. Обслуживание и очистка репозитория
  4. Перезапись истории с помощью git filter-repo
← Назад к DevOps Bootcamp