Тестирование с частично объединенной веткой
На предыдущих этапах мы увидели, как работают команды 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
могут помочь вам понять статус объединения ваших веток, даже когда были интегрированы только некоторые коммиты.