================================================================================
# Сброс изменений: git reset
================================================================================
# git reset используется для перезаписи последних изменений в git
--------------------------------------------------------------------------------
# Смешанный reset (режим по умолчанию, можно не указывать флаг --mixed)
--------------------------------------------------------------------------------
- перемещает указатель HEAD
- заменяет файлы в индексе
- не трогает файлы в рабочем каталоге
- используется для отмены команды git add
- используется, если хотим сформировать новый индекс.
- используется для переделки последних коммитов.
- используется для очистки текущего индекса от всех изменений
- Используется если хотим сбросить в индексе конкретный файл
--------------------------------------------------------------------------------
# Отмена комманды git add <files> (очистка индекса)
git reset - Очистка индекса от изменений
git reset HEAD - тоже самое
# Исправление последних коммитов:
git reset HEAD~ - Перемещение на один (или несколько) коммитов назад
git reset --mixed HEAD~ - Тоже самое (флаг --mixed) можно не ставить
# затем можно добавить файлы в индекс (т.к. он изменился) и перекоммитить
# Чтобы отменить комманду git reset используется:
git reset ORIG_HEAD
# Если хотим сбросить в индексе конкретный файл (отмена git add для файла)
git add index.php - добавили файл
git reset index.php - отменили добавление файла в индекс
--------------------------------------------------------------------------------
# Мягкий reset
--------------------------------------------------------------------------------
- перемещает только указатель HEAD
- отменяет коммит, и показывает подготовленные для коммита данные
- не изменяет индекс
- не изменяет рабочий каталог (оставляет в текущем состоянии)
--------------------------------------------------------------------------------
git reset --soft HEAD~ - Перемещение на один коммит назад
git reset --soft @~ - Тоже самое
git reset --soft ORIG_HEAD - Возврат назад (если передамали делать reset)
# Используется чтобы переделать неудачный коммит, например:
git reset --soft @~ - откатываемся
# вносим изменения в файлы
git commit -C ORIG_HEAD - Взять для нового коммита описание из старого коммита
# -c - вызовет редактор
# -C - без вызова редактора
# Или одной командой:
git commit --amend - Добавить изменения в предыдущий коммит
--------------------------------------------------------------------------------
# Жесткий reset
--------------------------------------------------------------------------------
- очищает рабочий каталог
- очищает индекс
- используется для очистки рабочего каталога от внесенных изменений
--------------------------------------------------------------------------------
git reset --hard - Очистка рабочего каталога от изменений
git reset --hard HEAD - Тоже самое
git reset --hard <hash> - Очистка рабочего каталога до состояние коммита
git reset --hard ORIG_HEAD - возврат на коммит, с которого ушли (если передумали очищать)
--------------------------------------------------------------------------------
# Жесткий reset с сохранением изменений
--------------------------------------------------------------------------------
- очищает индекс
- Незакоммиченные изменения оставляет в рабочем каталоге
- безопасная команда - не трогает измененные и не закоммиченные в рабочем каталоге файлы
--------------------------------------------------------------------------------
git reset --keep HEAD~ - Сброс файлов на состояние коммита,
кроме файлов, для которых есть незакоммиченные изменения.
--------------------------------------------------------------------------------
# Отмена конфликтного слияния
--------------------------------------------------------------------------------
git reset --merge - оставляет не проиндексированные изменения
- удяляет проиндексированные изменения,
--------------------------------------------------------------------------------