12. Отримання старих версій

Цілі

  • Навчитися повертати робочий каталог до будь-якого попереднього стану.

Повертатися назад в історію дуже просто. Команда checkout скопіює будь-який знімок з репозиторію в робочий каталог.

01 Отримайте хеши попередніх версій

Виконайте:

git hist

Примітка: Ви не забули задати hist у вашому файлі .gitconfig? Якщо забули, подивіться ще раз урок по псевдонімам.

Результат:

$ git hist
* fa3c141 2011-03-09 | Added HTML header (HEAD, master) [Alexander Shvets]
* 8c32287 2011-03-09 | Added standard HTML page tags [Alexander Shvets]
* 43628f7 2011-03-09 | Added h1 tag [Alexander Shvets]
* 911e8c9 2011-03-09 | First Commit [Alexander Shvets]

Вивчіть дані логу і знайдіть хеш для першого коміту. Він повинен бути в останньому рядку даних git hist. Використовуйте цей хеш-код (досить перших 7 знаків) в команді нижче. Потім перевірте вміст файлу hello.html.

Виконайте:

git checkout <hash>
cat hello.html

Примітка: Багато команд залежать від хешевих значень в репозиторії. Оскільки ваші хеш-значення будуть відрізнятися від моїх, коли ви бачите щось на зразок <hash> чи <treehash> у команді, підставте необхідне значення хешу для вашого репозітарію.

Ви побачите…

Результат:

$ git checkout 911e8c9
Note: checking out '911e8c9'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at 911e8c9... First Commit
$ cat hello.html
Hello, World

Вихідні дані команди checkout дуже добре пояснюють ситуацію. Старі версії git будуть лаятися, що не налаштовані в локальній гілці. У будь-якому разі, зараз про це не турбуйтеся.

Зверніть увагу на те, що вміст файлу hello.html є значенням за замовчуванням.

02 Поверніться до останньої версії в гілці master

Виконайте:

git checkout master
cat hello.html

Ви побачите…

Результат:

$ git checkout master
Previous HEAD position was 911e8c9... First Commit
Switched to branch 'master'
$ cat hello.html
<html>
  <head>
  </head>
  <body>
    <h1>Hello, World!</h1>
  </body>
</html>

«master» — ім'я гілки за замовчуванням. Перемикаючи імена гілок, ви потрапляєте на останню версію обраної гілки.