MyTetra Share
Делитесь знаниями!
git reset — возврат к определенному коммиту, откат изменений, «жесткий» или «мягкий»
20.07.2012
20:35
Раздел: Компьютер - Программирование - Системы контроля версий (VCS) - Git

Помимо работы с индексом (см. выше), git reset позволяет сбросить состояние

проекта до какого-либо коммита в истории. В git данное действие может быть двух видов: «мягкого»(soft reset) и «жесткого» (hard reset).


«Мягкий» (с ключом "--soft") сброс оставит нетронутыми ваши индекс (а практика показывает, что тронет индекс) и все дерево файлов и директорий проекта, вернется к работе с указанным коммитом. То есть, файлы в рабочем каталоге останутся нетронутыми, то есть отката состояния файлов в рабочей директории до состояния в указанном коммите не произойдет (в отличие от опции --hard). То есть, сдвинется только указатель в истории, без изменения файлов в рабочей директории.


Иными словами, если вы обнаруживаете ошибку в только что совершенном коммите или комментарии к нему, то легко можно исправить ситуацию:


git commit …


— произошел некорректный коммит;


git reset --soft HEAD^


— переходим к работе над этим уже совершенным коммитом, сохраняя все состояние проекта и проиндексированные файлы


edit WRONGFILE


edit ANOTHERWRONGFILE


add.


Команда:


git commit -c ORIG_HEAD


— вернутся к последнему коммиту. Будет предложено редактировать его сообщение. Если сообщение оставить прежним, то

достаточно изменить регистр ключа -с:


git commit -C ORIG_HEAD


Обратите внимание на обозначение HEAD^, оно означает «обратиться к предку последнего коммита». Подробней описан синтаксис такой относительной адресации будет ниже, в разделе «Хэши, тэги, относительная адресация». Соответственно, HEAD — ссылка на последний коммит. Ссылка ORIG_HEAD после «мягкого» резета указывает на оригинальный коммит.


Естественно, можно вернуться и на большую глубину коммитов.


«Жесткий» резет (ключ --hard) — команда, которую следует использовать с осторожностью. Git reset --hard вернет дерево проекта и индекс в состояние, соответствующее указанному коммиту, удалив изменения последующих коммитов:


git add.


git commit -m «destined to death»


git reset --hard HEAD~1


— больше никто и никогда не увидит этот позорный коммит.


git reset --hard HEAD~3


— вернее, три последних коммита. Никто. Никогда.



Если команда достигнет точки ветвления, удаления коммита не произойдет.


Для команд слияния или выкачивания последних изменений с удаленного репозитария примеры резета будут приведены в соответствующих разделах.


Так же в этом разделе:
 
MyTetra Share v.0.52
Яндекс индекс цитирования