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

Цілі

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

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

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

Виконайте

git log

Результат

$ git log
b7614c1 2023-11-28 | Added HTML header (HEAD -> main) [Alexander Shvets]
46afaff 2023-11-28 | Added standard HTML page tags [Alexander Shvets]
78433de 2023-11-28 | Added h1 tag [Alexander Shvets]
5836970 2023-11-28 | Initial commit [Alexander Shvets]

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

Виконайте

git checkout <hash>
cat hello.html

Багато команд Git приймають хеші комітів як аргументи. Хеші комітів будут відрізнятись у різних репозиторіях, тому коли ви бачите, що в команді є позначка <hash>, то це значить, що вам треба підставити замість неї реальниї хеш з вашого репозиторія.

Ви побачите:

Результат

$ git checkout 5836970
Note: switching to '5836970'.

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 switching back to a branch.

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

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 5836970 Initial commit
$ cat hello.html
Hello, World!

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

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

Щоб повернутися до останньої версії нашого коду, нам потрібно перемкнутись на гілку за замовчуванням, main. Для перемикання між гілками можна скористатися командою switch.

Команда checkout протягом тривалого часу була своєрідним швейцарським ножем у світі Git. Вона має безліч різноманітних опцій, які дозволяють виконувати абсолютно різні речі: перемикати гілки, відкочувати зміни тощо. У якийсь момент команда Git вирішила розділити її на декілька команд. Команда switch є однією з них — її єдиним призначенням є перемикання між гілками. Команда checkout все ще доступна, але використовувати її для перемикання гілок більше не рекомендується.

Виконайте

git switch main
cat hello.html

Ви побачите:

Результат

$ git switch main
Previous HEAD position was 5836970 Initial commit
Switched to branch 'main'
$ cat hello.html
<html>
  <head>
  </head>
  <body>
    <h1>Hello, World!</h1>
  </body>
</html>

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