Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Магия GIT.pdf
Скачиваний:
43
Добавлен:
15.03.2015
Размер:
316.64 Кб
Скачать

Магия Git

4 / 41

2.2 Расширенная отмена/Восстановление

Иногда вы просто хотите вернуться к определенной точке и забыть все изменения, потому что все они были неправильными. В таком случае:

$ git log

покажет вам список последних изменений (коммитов, прим. пер.) и их SHA1 хеши. Далее введите:

$ git reset --hard SHA1_HASH

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

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

$ git checkout SHA1_HASH

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

Эта альтернативная реальность называется «ветвь» (branch, прим. пер.), и чуть позже мы поговорим об этом. А сейчас просто запомните:

$ git checkout master

вернёт вас обратно в настоящее. Кроме того, чтобы не получать предупреждений от Git, всегда делайте коммит или сброс ваших изменений до запуска checkout.

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

git reset --hard: загружает ранее сохраненную игру и удаляет все версии, сохраненные после только что загруженной.

git checkout: загружает старую игру, но если вы продолжаете играть, состояние игры будет отличаться от более новых сохранений, которые вы сделали в первый раз. Любая игра, которую вы теперь сохраняете, попадает в отдельную ветвь, представляющую альтенативную реальность, в которую вы вошли. Как мы договорились.

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

$ git checkout SHA1_HASH some.file another.file

Будьте внимательны: такая форма checkout может незаметно перезаписать файлы. Чтобы избежать неприятных неожиданностей, выполняйте коммит до запуска checkout, особенно если вы только осваиваетесь с Git. Вообще, если вы не уверены в какой-либо операции, будь то команда Git или нет, сперва выполните git commit -a.

Не любите копировать и вставлять хеши? Используйте:

$ git checkout :/"Мой первый б"

для перехода на коммит, который начинается с приведенной строки.

Можно также запросить 5-ое с конца сохраненное состояние:

$ git checkout master~5