Как проверить, полностью ли ветка Git объединена с веткой main

GitGitBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы научитесь эффективно проверять, был ли ветка Git полностью объединена в другую ветку, в частности, в ветку main. Это важный навык для поддержания чистоты и организации репозитория Git.

Вы начнете с использования команды git branch --merged main для определения веток, которые полностью интегрированы в ветку main. Затем вы проверите результаты с помощью команды git log main ^branch, чтобы убедиться, что все коммиты из целевой ветки присутствуют в ветке main. Наконец, вы протестируете эти методы на частично объединенной ветке, чтобы понять различия в результатах.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git/BranchManagementGroup -.-> git/branch("Handle Branches") git/BranchManagementGroup -.-> git/checkout("Switch Branches") git/BranchManagementGroup -.-> git/merge("Merge Histories") git/BranchManagementGroup -.-> git/log("Show Commits") git/BranchManagementGroup -.-> git/cherry_pick("Cherry Pick") subgraph Lab Skills git/branch -.-> lab-560045{{"Как проверить, полностью ли ветка Git объединена с веткой main"}} git/checkout -.-> lab-560045{{"Как проверить, полностью ли ветка Git объединена с веткой main"}} git/merge -.-> lab-560045{{"Как проверить, полностью ли ветка Git объединена с веткой main"}} git/log -.-> lab-560045{{"Как проверить, полностью ли ветка Git объединена с веткой main"}} git/cherry_pick -.-> lab-560045{{"Как проверить, полностью ли ветка Git объединена с веткой main"}} end

Использование команды 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 <[email protected]>
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, тем самым подтверждая полное объединение. Наконец, мы протестировали эти методы на частично объединенной ветке, чтобы понять различия в выводе и укрепить наше понимание того, как точно определить статус объединения ветки.