Введение
В этом практическом занятии (лабораторной работе) вы научитесь эффективно проверять, был ли ветка Git полностью объединена в другую ветку, в частности, в ветку main. Это важный навык для поддержания чистоты и организации репозитория Git.
Вы начнете с использования команды git branch --merged main для определения веток, которые полностью интегрированы в ветку main. Затем вы проверите результаты с помощью команды git log main ^branch, чтобы убедиться, что все коммиты из целевой ветки присутствуют в ветке main. Наконец, вы протестируете эти методы на частично объединенной ветке, чтобы понять различия в результатах.
Используйте команду git branch --merged main
На этом этапе мы научимся использовать команду git branch --merged для определения, какие ветки были полностью интегрированы в другую ветку. Это очень полезная команда для поддержания чистоты и организации вашего репозитория.
Сначала убедимся, что мы находимся в директории нашего проекта. Откройте терминал и перейдите в директорию my-time-machine:
cd ~/project/my-time-machine
Теперь создадим новую ветку с именем feature-branch и переключимся на нее. Мы имитируем внесение некоторых изменений в этой ветке.
git branch feature-branch
git checkout feature-branch
echo "Adding a new feature" >> feature.txt
git add feature.txt
git commit -m "Add new feature"
После коммита вы должны увидеть вывод, похожий на следующий:
[feature-branch a1b2c3d] Add new feature
1 file changed, 1 insertion(+)
create mode 100644 feature.txt
Теперь переключимся обратно на ветку master и объединим ветку feature-branch с ней.
git checkout master
git merge feature-branch
Вы должны увидеть вывод, указывающий на успешное объединение:
Updating e1f2g3h..a1b2c3d
Fast-forward
feature.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 feature.txt
Теперь, когда мы объединили ветку feature-branch с веткой master, используем команду git branch --merged, чтобы узнать, какие ветки теперь полностью объединены с веткой master.
git branch --merged master
Эта команда выведет список всех веток, все коммиты которых были включены в ветку master. Вы должны увидеть как master, так и feature-branch в списке, что означает, что ветка feature-branch теперь полностью объединена с веткой master.
Понимание, какие ветки были объединены, важно, так как это помогает вам определить, какие ветки можно безопасно удалить, сохраняя репозиторий в порядке. Это похоже на то, чтобы знать, какие побочные задания в игре вы завершили и теперь можете игнорировать.
Проверьте с помощью команды git log main ^branch
На предыдущем этапе мы использовали команду git branch --merged для определения, какие ветки были объединены с веткой master. Теперь используем другую команду, git log, чтобы проверить это с другой стороны. Команда git log с синтаксисом main ^branch представляет собой мощный способ просмотра коммитов, которые есть в ветке main, но отсутствуют в ветке branch.
Сначала убедитесь, что вы находитесь в директории my-time-machine:
cd ~/project/my-time-machine
Теперь используем команду git log для просмотра коммитов, которые есть в ветке master, но отсутствуют в ветке feature-branch.
git log master ^feature-branch
Поскольку на предыдущем этапе мы полностью объединили ветку feature-branch с веткой master, все коммиты из ветки feature-branch теперь также присутствуют в ветке master. Поэтому эта команда должна показать вам коммиты, которые изначально были только в ветке master до объединения. Она не должна показывать коммит "Add new feature", который мы сделали в ветке feature-branch.
Вы должны увидеть вывод, похожий на следующий, показывающий только исходный(ые) коммит(ы) из ветки master:
commit e1f2g3h4i5j6k7l8m9n0o1p2q3r4s5t6u7v8w9x (HEAD -> master)
Author: Jane Doe <jane.doe@example.com>
Date: Mon Aug 7 10:00:00 2023 +0000
Send a message to the future
Если ветка feature-branch не была полностью объединена, эта команда показала бы коммиты, которые есть в ветке master, но отсутствуют в ветке feature-branch, а также любые коммиты, которые есть в ветке feature-branch, но отсутствуют в ветке master. То, что коммит "Add new feature" не отображается здесь, подтверждает, что он теперь присутствует в ветке master.
Этот синтаксис git log main ^branch представляет собой отличный способ визуально подтвердить, присутствуют ли все коммиты из одной ветки в другой. Он помогает вам понять взаимосвязь между разными ветками в вашем репозитории.
Тестирование с частично объединенной веткой
На предыдущих этапах мы увидели, как работают команды git branch --merged и git log main ^branch с полностью объединенной веткой. Теперь посмотрим, что произойдет с веткой, которая частично объединена, то есть некоторые, но не все, ее коммиты были интегрированы в другую ветку.
Сначала убедитесь, что вы находитесь в директории my-time-machine:
cd ~/project/my-time-machine
Создадим новую ветку с именем partial-feature и переключимся на нее:
git branch partial-feature
git checkout partial-feature
Теперь сделаем два коммита в этой новой ветке:
echo "Adding part 1 of the feature" >> partial.txt
git add partial.txt
git commit -m "Add part 1"
echo "Adding part 2 of the feature" >> partial.txt
git add partial.txt
git commit -m "Add part 2"
После коммитов вы должны увидеть вывод, похожий на следующий:
[partial-feature a1b2c3d] Add part 1
1 file changed, 1 insertion(+)
create mode 100644 partial.txt
[partial-feature e1f2g3h] Add part 2
1 file changed, 1 insertion(+)
Теперь переключимся обратно на ветку master и объединим только первый коммит из ветки partial-feature. Мы можем сделать это с помощью команды git cherry-pick. Сначала нам нужен хэш коммита "Add part 1". Вы можете найти его, запустив команду git log partial-feature и скопировав хэш первого коммита.
git checkout master
## Замените <commit_hash> на фактический хэш коммита "Add part 1"
git cherry-pick <commit_hash>
Вы должны увидеть вывод, указывающий на успешное применение коммита:
[master i1j2k3l] Add part 1
Date: Mon Aug 7 10:05:00 2023 +0000
1 file changed, 1 insertion(+)
create mode 100644 partial.txt
Теперь снова используем команду git branch --merged master:
git branch --merged master
Вы должны увидеть в списке master и feature-branch, но не partial-feature. Это потому, что в ветке partial-feature все еще есть коммит "Add part 2", который не был объединен с веткой master. Команда git branch --merged выводит только те ветки, в которых все коммиты присутствуют в целевой ветке.
Наконец, используем команду git log master ^partial-feature:
git log master ^partial-feature
Эта команда покажет вам коммиты, которые есть в ветке master, но отсутствуют в ветке partial-feature. Она должна показать исходный(ые) коммит(ы) из ветки master, коммит "Add new feature" (который теперь находится в ветке master) и коммит "Add part 1" (который мы применили с помощью cherry-pick). Она не должна показывать коммит "Add part 2", так как этот коммит находится только в ветке partial-feature.
Это демонстрирует, как команды git branch --merged и git log main ^branch могут помочь вам понять статус объединения ваших веток, даже когда были интегрированы только некоторые коммиты.
Резюме
В этом практическом занятии (лабораторной работе) мы научились проверять, полностью ли ветка Git была объединена с другой веткой, в частности с веткой main (или master). Мы начали с использования команды git branch --merged main, которая выводит список всех веток, чьи коммиты полностью интегрированы в ветку main. Это быстрый способ определить ветки, которые можно удалить.
Затем мы рассмотрели более детальный метод проверки с использованием команды git log main ^branch. Эта команда показывает коммиты, которые есть в ветке main, но отсутствуют в указанной ветке. Если эта команда не возвращает никакого вывода, это подтверждает, что все коммиты из указанной ветки присутствуют в ветке main, тем самым подтверждая полное объединение. Наконец, мы протестировали эти методы на частично объединенной ветке, чтобы понять различия в выводе и укрепить наше понимание того, как точно определить статус объединения ветки.



