Предыдущий ролик Следующий ролик  

Видео урок: Мягкая отмена

Git: обучение основам

В этом ролике я покажу soft reset. Вот commit log. Вы видите, что последний коммит зеркально отображает тот коммит, который был до него. А что, если мы хотим отменить нашу версию, как мы можем от нее избавиться? Мы можем написать для нее revert и написать revert для измененной версии. Здесь же мы отмотаем назад до того момента, как я сделал эту измененную версию, и установим вот на эту точку. Вот это ссылка, которую мы будем использовать. Мы перемотаем HEAD обратно на эту точку, так что запись будет идти отсюда. На что же это будет похоже? Перво-наперво я начинаю работу с перемещения указателя HEAD. Я считаю хорошей идеей открывать новый текстовый файл и просто вставлять туда самые последние коммиты. Можно взять несколько последних – это не большая проблема – и вставить их сюда.

Так что теперь у нас под рукой есть всегда эти коммиты. Если мы зайдем сюда, мы увидим записанные значения. Если мы перемотаем, мы больше не увидим их в логах. Но пока что я отложу это в сторону. Во-первых, давайте посмотрим, на что сейчас указывает HEAD, git/HEAD. Он указывает на refs/heads/master. Мы видели ранее, что есть файл refs/heads/master. Он всегда будет указывать на этот файл. Так что если мы прописываем это, находясь в основном бранче, он будет давать нам данный ответ – реальный SHA, который мы ищем, и который содержится в этом файле.

Прямо сейчас он указывает на 5c86ebd. Если вы посмотрите сюда, вы увидите, что 5c86ebd по факту является самым последним коммитом. Теперь же мы используем опцию soft для reset, git reset soft, и нам нужен второй коммит. Давайте просто вытянем его. Мы хотим вернуться к этому. Я просто копирую его, и мы вставляем его сюда. Теперь, это переместит указатель HEAD обратно на эту точку во времени.

Мне не было дано никакого сообщения, но если мы посмотрим на то, что он указывает – refs/heads/master, вы видите, что место изменилось. Теперь он указывает на другой коммит. И если я напишу git log, вы увидите, что самым последним коммитом является вот этот, da3866. Вот что делает git soft. Если мы напишем git status, вы увидите, что в нашей рабочей директории и в нашем буфере resources.html находится в своем самом последнем состоянии. Нет изменения, как в репозитории, только изменения, что мы сделали с тех пор.

Это возвращенный файл. Можно посмотреть на различия, git diff staged, и вы видите, что это изменение, которое мы сделали. То есть солнечные очки, крем для загара, средство против мошкары снова перемещены вниз. Таким образом, он не полностью избавился от наших изменений. Наши изменения все еще находятся в буфере и в рабочей директории. Теперь, если захотим, мы можем создать новый коммит. Он будет записан на том месте, где находился старый коммит. Очень похоже на кассетный магнитофон - как я и говорил, мы промотали назад и перезаписали последние 10 минут прошлого аудио.

Мы просто забыли о тех старых вещах, что мы делали, создавая отсюда новые коммиты. Или же мы можем вернуться к этому самому последнему коммиту и сделать так, чтобы HEAD снова указывал на него. get reset дефис дефис soft, и вставить сюда самый последний. Теперь, если мы напишем git log, снова возвращается наша версия. git status, коммитить здесь нечего. Наша рабочая директория чиста. Таким образом, все, что мы сделали, в основном, это делали так, что переместили HEAD с этого, на этот, а затем снова переместили его сюда.

Вы видите, git reset с опцией soft является самой безопасной и наименее разрушительной командой. На самом деле она вообще ничего не удаляет. Все, что она сделала, это переместила указатель HEAD на другой коммит, но вся наша работа до сих пор поддерживается в буфере и в рабочей директории. Мы ничего не потеряли. В следующем ролике мы сравним это с reset mixed.