Введение
В этом практическом занятии (лабораторной работе) вы научитесь определять, существует ли конкретный коммит (commit) Git в определенной ветке (branch). Мы рассмотрим команду git branch --contains, которая позволяет определить все ветки, содержащие заданный коммит, и получить представление о истории коммита и точках его интеграции.
Вы также научитесь использовать команду git log с указанием имени ветки для проверки наличия коммита в истории этой ветки и эффективно проверять несколько веток на наличие коммита. В результате этого практического занятия вы получите важные навыки для понимания и навигации по истории проекта Git.
Запустить команду git branch --contains для коммита
На этом этапе мы научимся использовать команду git branch --contains для определения, в каких ветках (branches) содержится конкретный коммит (commit). Это очень полезная команда, когда вы хотите понять историю проекта и увидеть, где конкретное изменение было интегрировано.
Сначала убедимся, что мы находимся в директории my-time-machine. Откройте терминал и введите:
cd ~/project/my-time-machine
Теперь создадим новый файл и сделаем коммит. Это даст нам новый коммит для работы.
echo "Another message for the future" > message2.txt
git add message2.txt
git commit -m "Add another message"
После коммита вы должны увидеть вывод, похожий на следующий:
[master <commit-id>] Add another message
1 file changed, 1 insertion(+)
create mode 100644 message2.txt
Теперь у нас есть новый коммит. Найдем идентификатор (ID) этого нового коммита. Мы можем использовать команду git log --oneline для просмотра сжатой истории коммитов:
git log --oneline
Вывод будет выглядеть приблизительно так:
<commit-id-2> (HEAD -> master) Add another message
<commit-id-1> Send a message to the future
Первый перечисленный идентификатор коммита относится к коммиту "Add another message". Скопируйте этот идентификатор коммита.
Теперь используем команду git branch --contains с этим идентификатором коммита. Замените <commit-id-2> на фактический идентификатор коммита, который вы скопировали:
git branch --contains <commit-id-2>
Вывод должен показать ветку master, что означает, что этот коммит находится на ветке master:
* master
Команда git branch --contains <commit> очень мощная, так как она помогает отследить происхождение коммита. Если у вас есть несколько веток, эта команда перечислит все ветки, содержащие этот конкретный коммит. Это необходимо для понимания того, как изменения распространяются по различным линиям разработки в вашем проекте.
Использовать git log для ветки (Branch) для проверки
На предыдущем этапе мы использовали команду git branch --contains для определения, в каких ветках (branches) содержится конкретный коммит (commit). Теперь давайте используем команду git log с указанием имени ветки, чтобы проверить историю этой ветки. Это покажет нам все коммиты, входящие в историю данной ветки.
Убедитесь, что вы по-прежнему находитесь в директории ~/project/my-time-machine:
cd ~/project/my-time-machine
Из предыдущего шага мы знаем, что наш последний коммит находится на ветке master. Давайте посмотрим журнал (log) конкретно для ветки master:
git log master --oneline
Вы должны увидеть вывод, похожий на следующий, показывающий коммиты на ветке master:
<commit-id-2> (HEAD -> master) Add another message
<commit-id-1> Send a message to the future
Этот вывод подтверждает, что оба наших коммита действительно находятся на ветке master. Использование команды git log <branch-name> - отличный способ изучить историю конкретной ветки и увидеть все коммиты, достижимые с конца этой ветки.
Сравнение вывода команд git branch --contains <commit> и git log <branch-name> помогает понять взаимосвязь между коммитами и ветками. Команда git branch --contains показывает, в каких ветках коммит содержится где-либо в их истории, в то время как команда git log <branch-name> показывает линейную историю, ведущую к концу конкретной ветки.
Нажмите q для выхода из просмотра журнала.
Проверить несколько веток
На этом этапе мы создадим новую ветку (branch) и посмотрим, как работает команда git branch --contains, когда коммит (commit) присутствует в нескольких ветках. Это дополнительно продемонстрирует мощь этой команды при понимании структуры ветвления проекта.
Сначала убедитесь, что вы находитесь в директории ~/project/my-time-machine:
cd ~/project/my-time-machine
Теперь создадим новую ветку с именем feature-branch:
git branch feature-branch
Эта команда создает новую ветку, но не переключает вас на нее. Вы по-прежнему находитесь на ветке master.
Давайте проверим наши ветки:
git branch
Вы должны увидеть перечисление обеих веток, при этом master будет подсвечена (что означает, что это текущая ветка):
* master
feature-branch
Теперь снова получим идентификатор (ID) нашего последнего коммита с помощью команды git log --oneline:
git log --oneline
Вывод будет похож на предыдущий:
<commit-id-2> (HEAD -> master, feature-branch) Add another message
<commit-id-1> Send a message to the future
Обратите внимание, что в последнем коммите теперь показаны и HEAD -> master, и feature-branch. Это означает, что ветка feature-branch была создана на этом коммите.
Теперь снова используем команду git branch --contains с этим идентификатором коммита. Замените <commit-id-2> на фактический идентификатор коммита:
git branch --contains <commit-id-2>
На этот раз вывод должен показать обе ветки, так как коммит присутствует в истории как ветки master, так и ветки feature-branch:
* master
feature-branch
Это демонстрирует, как команда git branch --contains может показать все ветки, в истории которых есть определенный коммит. Это чрезвычайно полезно для отслеживания того, где изменения были объединены или интегрированы в разных линиях разработки.
Резюме
В этом практическом занятии (lab) мы научились проверять, присутствует ли коммит (commit) в определенной ветке (branch) Git. Мы начали с использования команды git branch --contains <commit-id>, которая перечисляет все ветки, содержащие указанный коммит. Это фундаментальный инструмент для понимания истории и интеграции изменений в репозитории (repository) Git.
Затем мы изучили, как проверить наличие коммита в ветке с помощью команды git log <branch-name>. Эта команда отображает историю коммитов конкретной ветки, позволяя нам визуально подтвердить, является ли целевой коммит частью истории этой ветки. Наконец, мы увидели, как расширить эти методы для проверки наличия коммита в нескольких ветках, что дает полное представление о его распространении в структуре ветвления проекта.



