Git WindowsLinuxmacOSGit

Git: Как восстановить случайно удалённую локальную ветку Git

  • Обновлено
  • Чтение ≈ 3 минуты

Краткий ответ

Случайно удалённую локальную ветку нередко можно восстановить, если её коммиты ещё есть в истории других ссылок или reflog. Восстановление зависит от времени и сборки мусора Git; одно лишь имя удалённой ветки не гарантирует сохранение её коммитов.

В этой статье
  1. Как проявляется ошибка и когда применим способ
  2. Причины и признаки
  3. Пошаговая диагностика и решение
  4. Проверка результата и действия при повторении

#Как проявляется ошибка и когда применим способ

Случайно удалённую локальную ветку нередко можно восстановить, если её коммиты ещё есть в истории других ссылок или reflog. Восстановление зависит от времени и сборки мусора Git; одно лишь имя удалённой ветки не гарантирует сохранение её коммитов.

#Причины и признаки

Возможная причинаКак узнатьЧто делать
Коммиты ещё доступныУдалена ссылка ветки, но объект последнего коммита существует.git reflog или история других веток содержит нужный хеш.Создать новую ветку на найденном коммите.
Ветка уже была на сервереЛокальная ссылка удалена, но origin/ветка существует.git branch -r показывает нужное имя.Создать отслеживаемую локальную ветку.

#Пошаговая диагностика и решение

  1. 1. Немедленно прекратите очистку и упаковку репозиторияНе запускайте git gc --prune=now и не удаляйте .git. Скопируйте весь репозиторий с .git в отдельное место, прежде чем экспериментировать. Если удаление было сделано недавно, reflog может сохранить полезные записи, но срок хранения не бесконечен.
  1. 2. Проверьте удалённые и локальные ссылкиВ каталоге проекта откройте терминал и выполните git branch -a. Если нужная ветка показана как remotes/origin/ИМЯ, создайте локальную через git switch --track origin/ИМЯ, заменив имя. Не создавайте ветку на случайном коммите с похожим сообщением.
  2. Только чтение списка веток, включая удалённые ссылки
    Linux · Терминал (Bash)Команда
    Только чтение списка веток, включая удалённые ссылки.
    git branch -a
  1. 3. Изучите журнал перемещений HEADВыполните git reflog --date=iso и внимательно прочитайте записи checkout/switch/commit. Найдите последний коммит нужной ветки до удаления, запишите полный или сокращённый однозначный хеш. Если reflog не содержит искомую запись, используйте историю других клонов, резервные копии или журнал CI.
  2. Читает локальный reflog; не изменяет репозиторий
    Linux · Терминал (Bash)Команда
    Читает локальный reflog; не изменяет репозиторий.
    git reflog --date=iso
  1. 4. Проверьте найденный коммит без переключенияДля конкретного ХЕШ запустите git show --stat ХЕШ. Посмотрите имя проекта, список изменённых файлов и дату, а при необходимости откройте diff. Если содержимое не соответствует утраченной ветке, продолжайте поиск, не создавая ветку вслепую.
  2. Замените ХЕШ идентификатором из reflog; показывает выбранный коммит
    Linux · Терминал (Bash)Команда
    Замените ХЕШ идентификатором из reflog; показывает выбранный коммит.
    git show --stat ХЕШ
  1. 5. Восстановите ссылку на подтверждённый коммитКогда хеш подтверждён, выполните git branch ВОССТАНОВЛЕННАЯ_ВЕТКА ХЕШ. Это создаст новую локальную ветку на существующем коммите, не переписывая файлы текущей ветки. Проверьте отсутствие ветки с таким именем до выполнения.
  2. Создаёт локальную ветку recovered-feature на найденном коммите; замените ХЕШ
    Linux · Терминал (Bash)Команда
    Создаёт локальную ветку recovered-feature на найденном коммите; замените ХЕШ.
    git branch recovered-feature ХЕШ
  1. 6. Откройте восстановленную ветку и проверьте проектПри чистом рабочем дереве переключитесь git switch recovered-feature, затем сравните лог и необходимые файлы. Если есть незакоммиченные правки, прежде сохраните их; переключение может быть заблокировано, чтобы не потерять данные.
  2. Изменяет рабочую ветку; запускайте только после резервной копии и чистого status
    Linux · Терминал (Bash)С осторожностью
    Изменяет рабочую ветку; запускайте только после резервной копии и чистого status.
    git switch recovered-feature
    git log -5 --oneline

    Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

  1. 7. Зафиксируйте восстановление безопасноЕсли восстановленные изменения ценны, создайте резервную ветку или отметьте коммит в личной копии, прежде чем делать merge или push. Если reflog ничего не показывает и серверной копии нет, восстановление не гарантируется: не запускайте агрессивные команды очистки для «поиска».

#Проверка результата и действия при повторении

Успех: восстановленная локальная ветка указывает на проверенный коммит, файлы и история содержат нужные изменения. Если ветка существовала на сервере, дополнительно сверьте upstream перед публикацией.

Если на указанном шаге результат отличается, остановитесь и запишите первое полное сообщение об ошибке, версию инструментов и проверенное состояние до исправления. Не переходите к опасным действиям на действующем проекте: повторите проверку на отдельной копии, верните сохранённые файлы и только затем выбирайте следующую причину.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.