Гид по технологиям

Сброс репозитория Git: stash, reset, clean и клонирование

5 min read GIT Обновлено 01 Dec 2025
Как сбросить репозиторий Git: stash, reset, clean
Как сбросить репозиторий Git: stash, reset, clean

Иллюстрация: состояние локального репозитория Git

Быстрая навигация

  • Сохранение изменений — Git Stash
  • Полный сброс — Git Reset
  • Очистка неотслеживаемых файлов — Git Clean
  • Альтернатива: клонирование нового репозитория

Иконка: советы по сбросу Git

Git предоставляет мощные инструменты для восстановления рабочей копии. Они позволяют откатиться к состоянию удалённой ветки или к определённому коммиту. Ниже — практическое руководство с рекомендациями, примерами и чеклистами.


Сохранение изменений (Git Stash)

Перед выполнением любых команд сброса убедитесь, что не потеряете важные незакоммиченные изменения.

Короткое пояснение: git stash временно прячет ваши незакоммиченные изменения в стек, чтобы рабочая директория вернулась к чистому состоянию.

Важно: есть несколько видов сбросов. Soft и mixed сбрасывают состояние индекса/HEAD, но сохраняют незакоммиченные изменения. Hard удаляет незакоммиченные изменения — это разрушительная операция.

Схема: как работает stash и reset

Простой пример: сохраните изменения в стеке:

git stash

Применить сохранённый стек (не удаляет запись из стека):

git stash apply

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

git checkout -b my-temp-work
git add .
git commit -m "WIP: временное сохранение"

Когда это уместно:

  • Вы экспериментируете и хотите вернуться к чистому состоянию, не теряя прогресса.
  • Нельзя потерять незакоммиченные конфигурационные файлы.

Когда это не сработает:

  • Если ваши изменения касаются новых неотслеживаемых файлов (по умолчанию git stash их не сохраняет без флага).

Совет: чтобы сохранить и неотслеживаемые файлы, используйте:

git stash --include-untracked

Выполнение сброса (Git Reset)

Короткое пояснение: git reset перемещает указатель ветки (HEAD) на выбранный коммит и может изменить индекс и рабочую копию в зависимости от флага (soft/mixed/hard).

Шаги перед сбросом:

  1. Получите актуальное состояние удалённого репозитория, обычно origin:
git fetch origin
  1. Переключитесь на ветку, которую хотите привести в порядок (например, master):
git checkout master
  1. (Опционально) можно выбрать конкретный коммит по ID:
git checkout 342c47a4
  1. Жёсткий сброс к актуальной удалённой ветке (удаляет незакоммиченные изменения в tracked-файлах):
git reset --hard origin/master

Примечание: git reset –hard — разрушительная команда. Убедитесь, что у вас есть резервные копии или вы использовали git stash/коммит, если хотите сохранить результат работы.

Альтернативы и сценарии:

  • soft reset: сохранит изменения в рабочей директории и индексе для дальнейшего редактирования и нового коммита.
  • mixed reset (поведение по умолчанию без флага): снимет изменения из индекса, но оставит их в рабочей директории.

Когда reset не решит проблему:

  • Если проблема в неотслеживаемых артефактах сборки, сброс tracked-файлов не удалит их — нужен git clean.

Очистка неотслеживаемых файлов (Git Clean)

Короткое пояснение: git clean удаляет файлы и каталоги, которые не отслеживаются Git (часто это артефакты сборки, кэши, лог-файлы).

Команда для удаления неотслеживаемых директорий и файлов принудительно:

git clean -d --force

Важно: git clean не трогает файлы, перечисленные в .gitignore, если вы явно не укажете соответствующие флаги.

Когда запускать:

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

Можно запустить git clean без reset — это полезно, если вы хотите оставить код, но удалить артефакты сборки.

Предварительно посмотреть, что удалится:

git clean -d --dry-run

Альтернатива: клонирование нового репозитория

Иногда проще и быстрее полностью удалить локальную папку и клонировать репозиторий заново. Это сбрасывает всё до состояния удалённого репозитория и удобно при серьёзном рассогласовании.

Пример последовательности:

sudo rm -r git-repository
git clone https://github.com/user/git-repository.git
cd git-repository

Учтите:

  • Это восстановит состояние только до удалённого репозитория, а не до локального коммита, который был только у вас.
  • По умолчанию клонируется ветка master; переключитесь позже с помощью git switch или клонируйте с флагом -b:
git clone -b my-branch https://github.com/user/git-repository.git

Решение: когда что выбрать (decision tree)

flowchart TD
  A[Есть незакоммиченные изменения?] -->|Да| B{Это важная работа?}
  A -->|Нет| C[Нужен только reset или clean]
  B -->|Да| D[Сохранить: git stash или коммит в новую ветку]
  B -->|Нет| E[Можно жёстко сбросить]
  D --> C
  E --> F[git reset --hard origin/branch]
  C --> G{Есть неотслеживаемые артефакты?}
  G -->|Да| H[git clean -d --force]
  G -->|Нет| I[Закончено]

Ролевые чеклисты

Разработчик:

  • Сделать git stash или закоммитить WIP в новую ветку.
  • Выполнить git fetch origin.
  • git checkout нужной ветки.
  • git reset –hard origin/ветка.
  • git clean -d –dry-run, затем git clean -d –force.

Технический лидер / ревьюер:

  • Проверить, что никто не работает в локальных ветках с важными коммитами.
  • Убедиться, что удалённый репозиторий актуален и содержит нужную историю.

DevOps / SRE:

  • Проверить CI/CD, если перестроение требуется после сброса.
  • Убедиться, что артефакты не теряются (хранилища артефактов, кеши).

Критерии приёмки

  • Локальная ветка совпадает с выбранной удалённой веткой (git status показывает чистую рабочую директорию).
  • Сборка проходит без ошибок, если это ожидаемое состояние.
  • Не осталось незакоммиченных изменений или неожиданных неотслеживаемых файлов.

Риски и смягчение

Риск: потеря незакоммиченных изменений. Смягчение: всегда делать git stash или коммит в новую ветку перед жестким сбросом.

Риск: удаление важных неотслеживаемых конфигураций. Смягчение: проверьте список таких файлов в .gitignore и сделайте резервную копию.


Быстрый чеклист перед любым сбросом

  • git fetch origin
  • git status — убедиться в состоянии рабочей директории
  • git stash или коммит в новую ветку (если нужно сохранить работу)
  • git reset –hard origin/ветка
  • git clean -d –dry-run, затем git clean -d –force

Краткое резюме

Git умеет восстанавливать состояние проекта несколькими путями: stash хранит незавершённую работу; reset возвращает tracked-файлы к состоянию коммита; clean удаляет неотслеживаемые артефакты; а полное клонирование восстанавливает точную копию удалённого репозитория. Выбирайте инструмент в зависимости от того, хотите ли вы сохранить текущую работу и от наличия неотслеживаемых файлов.

Примечание: всегда делайте dry-run или резервную копию перед разрушительными командами.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Изменить имя учётной записи в Windows
Windows

Изменить имя учётной записи в Windows

Edge закрывается сразу — как исправить
Windows

Edge закрывается сразу — как исправить

Как снизить напряжение CPU: безопасный гид
Hardware

Как снизить напряжение CPU: безопасный гид

Как создать комнату в Google Chat
Руководство

Как создать комнату в Google Chat

Проверка активных SSH‑сессий на Linux
Linux

Проверка активных SSH‑сессий на Linux

Установка speedtest-cli на Ubuntu, macOS и Windows
Сеть

Установка speedtest-cli на Ubuntu, macOS и Windows