Link Search Menu Expand Document
24 Мая 2023 г.

Команда git reset

git reset универсальная команда для отмены изменений и переписывание истории коммитов.

Команда git revert будет предпочтительнее если нужно отменить один коммит

Работает с тремя деревьями:

  • Рабочий каталог - файлы синхронизированные с файловой системой, отображают непосредственно изменения внесенные в файлы (modified)
  • Раздел проиндексированных файлов - то, что подготовлено к коммиту
  • История коммитов - это и есть история коммитов, слепки состояния. Включает раздел проиндексированных файлов на момент его создания.

Вывод git status отображает различия между историей коммитов и разделом проиндексированных файлов.

Параметры команды --soft, --mixed и --hard определяют каким образом нужно изменить деревья выше

Пример использования опции --hard полное уничтожения рабочего каталоги и раздела проиндексированных файлов.

Имеем следующие изменения в репозитории:

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   file

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	deleted:    file2

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	file3
  • file был изменен и добавлен в раздел индексированных файлов
  • file2 был удален
  • file3 был добавлен, но не проиндексирован

В данном случае только file2 находятся в рабочем каталоге

# Полный сброс рабочего каталога и раздела проиндексированных файлов до состояния репозитория
git reset --hard # Важно понимать: восстановить эти потерянные данные невозможно.

Нетронутым остался только file3, так как он не добавлен в отслеживание.

Следующая опция --mixed

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   file2

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	file3

file2 добавлен в раздел проиндексированных файлов

# Изменения будут перемещены из раздела проиндексированных файлов в рабочий каталог
git reset # или git reset --mixed HEAD

Раздел проиндексированных файлов был сброшен, при этом мы изменения не теряем.

Флаг --soft используется не часто, на моей практике я его не использовал.

reset
  • !!! git reset является опасной командой для отмены изменений, есть риск потерять наработки
  • !!! Важно помнить, что если коммит был отправлен в публичный репозиторий, нельзя использовать команду git reset, можно поломать историю. В локальном репозитории можно делать что угодно.

Несколько примеров

# Перемещение файла из раздела проиндексированных файлов в рабочий каталог, при этом не меняя файлы
git reset file2
# Самое жесткое уничтожение, уничтожит все наработки + все коммиты до этого
git reset --hard 339db6b04afdab65ad79e8e2b28600cbaf0088eb

Возник вопрос или предложение пиши на почту alexsey_89@bk.ru или в Телеграмм канал

Дата публикации: 24 Мая 2023 г.

Содержание


Наверх

Последнее изменение страницы: 28 Мая 2023 г.