Введение
В этом практическом занятии (лабораторной работе) вы узнаете, как проверить, является ли определенный коммит Git последним коммитом в вашем репозитории. Мы рассмотрим, как использовать команду git log -1 для просмотра самого последнего коммита, на который указывает HEAD, а затем используем git rev-parse HEAD для получения уникального идентификатора этого коммита. Наконец, вы протестируете эти команды на более старых коммитах, чтобы закрепить понимание того, как HEAD представляет текущую позицию в истории проекта.
Запустите git log -1 для проверки HEAD
На этом этапе мы узнаем, как быстро проверить самый последний коммит в нашем Git-репозитории с помощью команды git log -1. Это удобный способ посмотреть текущее состояние истории проекта без просмотра всего журнала.
Сначала убедитесь, что вы находитесь в директории my-time-machine. Если нет, используйте команду cd для перехода в эту директорию:
cd ~/project/my-time-machine
Теперь запустим команду для просмотра последнего коммита:
git log -1
Вы должны увидеть вывод, похожий на следующий:
commit a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9 (HEAD -> master)
Author: Jane Doe <jane.doe@example.com>
Date: Mon Aug 7 10:00:00 2023 +0000
Send a message to the future
Команда git log -1 показывает детали самого последнего коммита, сделанного в текущей ветке. Опция -1 сообщает Git показать только самый свежий коммит.
Обратите внимание на часть (HEAD -> master). HEAD - это указатель, который всегда указывает на последний коммит в текущей ветке. В данном случае он указывает на последний коммит в ветке master. Представьте HEAD как вашу текущую позицию на временной шкале проекта. Когда вы создаете новый коммит, HEAD автоматически перемещается вперед и указывает на этот новый коммит.
Понимание HEAD имеет решающее значение, так как многие команды Git работают с коммитом, на который указывает HEAD. В следующих шагах мы рассмотрим, как HEAD связан с конкретными идентификаторами коммитов.
Сравните коммит с помощью git rev-parse HEAD
На предыдущем этапе мы увидели, что команда git log -1 показывает коммит, на который указывает HEAD. Теперь давайте используем команду git rev-parse HEAD для получения только уникального идентификатора (хэша SHA-1) коммита, на который в данный момент указывает HEAD.
Убедитесь, что вы по-прежнему находитесь в директории ~/project/my-time-machine.
Запустите следующую команду:
git rev-parse HEAD
Вы должны увидеть длинную строку букв и цифр, которая представляет собой полный хэш SHA-1 вашего последнего коммита:
a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9
Сравните этот вывод с хэшем коммита, который вы видели в выводе команды git log -1 на предыдущем этапе. Они должны совпадать!
Команда git rev-parse является низкоуровневой командой Git, которая часто используется для преобразования различных типов ссылок Git (например, имен веток, тегов или HEAD) в соответствующие им хэши SHA-1. Это мощный инструмент для написания скриптов и автоматизации в Git.
При использовании команды git rev-parse HEAD вы, по сути, спрашиваете Git: "Какой точный идентификатор коммита представляет моя текущая позиция (HEAD)?". Это дает вам исходный идентификатор снимка, с которым вы в данный момент работаете.
Понимание того, как получить исходный хэш коммита, имеет важное значение, так как эти хэши являются основным способом отслеживания определенных версий вашего проекта в Git. Вы можете использовать эти хэши для ссылки на любую точку в истории вашего проекта.
Тестирование с более старыми коммитами
На предыдущих этапах мы узнали о HEAD и о том, как получить хэш его коммита. Теперь давайте посмотрим, как Git ссылается на более старые коммиты.
В настоящее время в нашем репозитории есть только один коммит. Чтобы показать, как ссылаться на более старые коммиты, нам нужно создать еще один коммит.
Сначала добавим еще одну строку в файл message.txt. Используем команду echo с оператором >> для добавления текста в файл:
echo "This is a second message." >> message.txt
Теперь проверим статус:
git status
Вы должны увидеть, что файл message.txt был изменен:
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: message.txt
no changes added to commit (use "git add and/or git commit -a)
Теперь добавим изменения в индекс и создадим новый коммит:
git add message.txt
git commit -m "Add a second message"
Вы должны увидеть вывод, указывающий на то, что новый коммит был создан:
[master a1b2c3d] Add a second message
1 file changed, 1 insertion(+)
Теперь у нас есть два коммита. Давайте снова посмотрим журнал:
git log --oneline
Опция --oneline дает краткий вид журнала. Вы должны увидеть что-то вроде этого (хэши будут разными):
a1b2c3d (HEAD -> master) Add a second message
e4f5g6h Send a message to the future
Верхний коммит - это самый новый, и именно на него указывает HEAD. Коммит ниже - это более старый.
Git предоставляет способы ссылаться на коммиты относительно HEAD. Коммит непосредственно перед HEAD можно ссылаться как HEAD~1 или HEAD^. Давайте попробуем получить хэш предыдущего коммита с помощью git rev-parse:
git rev-parse HEAD~1
Вы должны увидеть хэш первого коммита, который вы сделали:
e4f5g6h7i8j9k0l1m2n3o4p5q6r7s8t9u0v1w2x3
Этот хэш должен совпадать с хэшем коммита "Send a message to the future" в выводе команды git log --oneline.
Вы можете использовать HEAD~2, HEAD~3 и так далее, чтобы ссылаться на коммиты, находящиеся дальше в истории. Эта относительная ссылка очень полезна для навигации по истории проекта и выполнения операций с определенными предыдущими версиями.
Резюме
В этом практическом занятии мы научились проверять, является ли коммит в Git последним, поняв роль HEAD. Мы использовали команду git log -1 для просмотра деталей самого последнего коммита и обнаружили, что HEAD указывает на этот коммит. Затем мы воспользовались командой git rev-parse HEAD для получения уникального хэша SHA-1 коммита, на который в данный момент указывает HEAD, который представляет собой последний коммит в текущей ветке.



