Merge

Содержание
Введение
Пример
Другие статьи про Git

Введение

В этой статье вы можете изучить пример слияния веток без конфликтов. Разбор конфликтов вы можете изучить здесь

Чтобы подготовить проект создайте директорию merge_demo инициалзируйте репозиторий и создайте файлы partners.txt и sites.md со следюущим содержимым:

## partners.txt aviasales.com beget.com ostrovok.ru

## sites.md andreyolegovich.ru www.aredel.com

mkdir merge_demo cd merge_demo git init git branch -M main touch partners.txt sites.md vi partners.txt vi sites.md git add -A git commit -m "Initial commit"

merge_demo/ ├── partners.txt └── sites.md

Пример

git status

On branch main nothing to commit, working tree clean

git branch feature
git branch

feature * main

git checkout feature

Switched to branch 'feature'

git branch

* feature main

Добавим строку в файл partners.txt

## partners.txt aviasales.com beget.com ostrovok.ru hotellook.com

git add partners.txt
git commit -m "Adds hotellook.com to partners.txt"

Добавим строку в файл sites.md

## sites.md andreyolegovich.ru www.aredel.com testsetup.ru

git add sites.md
git commit -m "Adds testsetup.ru to sites.md"

git status

On branch feature nothing to commit, working tree clean

git checkout main

touch heihei.ru.sitemap.xml
git status

On branch main Untracked files: (use "git add <file>..." to include in what will be committed) heihei.ru.sitemap.xml nothing added to commit but untracked files present (use "git add" to track)

git add heihei.ru.sitemap.xml
git commit -m "Adds heihei.ru sitemap"

[main 578a2ed] Adds heihei.ru sitemap 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 heihei.ru.sitemap.xml

git status

On branch main nothing to commit, working tree clean

alt
Ветки main и feature
Визуализация коммитов

На диаграмме визуализирована наша текущая ситуация: с момента выделения ветки feature из ветки main ветка feature получила два коммита а ветка main один коммит.

Существует множесто инструментов, которые позволяют визуализировать ветки. В PyCharm это выглядит следующим образом:

alt
Ветки main и feature
Визуализация в PyCharm

С помощью merge ветка feature должна влиться обратно в main

git merge feature -m "Merge feature branch into main"

Merge made by the 'ort' strategy. partners.txt | 1 + sites.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-)

Слияние произошло без конфликтов , поэтому дополнительных действий не требуется.

Слияние веток обычно иллюстрируют следующим оригинальным образом:

alt
merged main и feature
Визуализация в gitnuro
alt
merged main и feature
Визуализация в PyCharm

Историю коммитов можно изучить командой git log

git log

commit 8c55e995da65c00012d20136f9fe206b7e628b15 (HEAD -> main) Merge: 578a2ed 26b1495 Author: Olegovich, Andrei <andrei@aredel.com> Date: Tue Aug 19 12:36:04 2025 +0300 Merge feature branch into main commit 578a2ed7854259a00e3ea28b8330be314a9bbf81 Author: Olegovich, Andrei <andrei@aredel.com> Date: Mon Aug 18 17:08:19 2025 +0300 Adds heihei.ru sitemap commit 26b1495969c3b7eb12afe7a81146ed14b7c178eb (feature) Author: Olegovich, Andrei <andrei@aredel.com> Date: Mon Aug 18 16:54:11 2025 +0300 Adds testsetup.ru to sites.md commit b32b5a32456cdaccab89b4556286173608cc0c34 Author: Olegovich, Andrei <andrei@aredel.com> Date: Mon Aug 18 16:50:46 2025 +0300 Adds hotellook.com to partners.txt commit 6622332c6759e883e20a294d867c07665bae74a0 Author: Olegovich, Andrei <andrei@aredel.com> Date: Mon Aug 18 16:37:39 2025 +0300 me

Обратите внимание на строку

commit 26b1495969c3b7eb12afe7a81146ed14b7c178eb (feature)

Здесь видно какой коммит был последним в ветке feature.

После того как был сделан merge ветка feature продолжила существовать в том виде в котором мы оставили её после добавления строки testsetup.ru в файл sites.md.

Содержимое ветки feature было добавлено в ветку main но не наоборот.

В сокращённом виде можно изучить эту информацию с помощью опции --oneline

git log --oneline

8c55e99 (HEAD -> main) Merge feature branch into main 578a2ed Adds heihei.ru sitemap 26b1495 (feature) Adds testsetup.ru to sites.md b32b5a3 Adds hotellook.com to partners.txt 6622332 me

Чтобы получить визуализацию веток используют опцию --graph

git log --oneline --graph

* 8c55e99 (HEAD -> main) Merge feature branch into main |\ | * 26b1495 (feature) Adds testsetup.ru to sites.md | * b32b5a3 Adds hotellook.com to partners.txt * | 578a2ed Adds heihei.ru sitemap |/ * 6622332 me

РЕКЛАМА от Яндекса. Может быть недоступна в вашем регионе

Конец рекламы. Если там пусто считайте это рекламой моей телеги

Как уже было сказано выше, ветка feature по-прежнему существует. Так как в ней уже нет никакого уникального содержимого, ветку можно спокойно удалить.

git branch -d feature

Deleted branch feature (was 26b1495).

git log --oneline --graph

* 8c55e99 (HEAD -> main) Merge feature branch into main |\ | * 26b1495 Adds testsetup.ru to sites.md | * b32b5a3 Adds hotellook.com to partners.txt * | 578a2ed Adds heihei.ru sitemap |/ * 6622332 me

git branch -a

* main

alt
merged main и feature
Визуализация в PyCharm
alt
merged main и feature
Визуализация в PyCharm

Теперь нужно присоединить этот удалённый репозиторий к локальному.

Часто встречаю такую инструкцию:

git remote add origin https://github.com/AndreiOlegovich/merge_demo.git
git remote -v

origin https://github.com/AndreiOlegovich/merge_demo.git (fetch) origin https://github.com/AndreiOlegovich/merge_demo.git (push)

Не очень понимаю, почему её преподносят как дефолтную, ведь ещё в 2021-м году обычную аутентификацию по паролю запретили.

Этот способ подойдёт тем, кто аутентифицируется по SSO через браузер, то есть, скорее пользователям корпоративных сетей.

Мне нужно проделать стандартный набор действий для подключения с помощью SSH ключа.

С чистого листа:

git remote add origin git@github.com:AndreiOlegovich/merge_demo.git

Либо, если уже была привязка по HTTPS

git remote set-url origin git@github.com:AndreiOlegovich/merge_demo.git

git remote -v

origin git@github.com:AndreiOlegovich/merge_demo.git (fetch) origin git@github.com:AndreiOlegovich/merge_demo.git (push)

Нужно подготовить SSH ключ

cd ~/.ssh ssh-keygen -t ed25519 -C "username@email.ru" eval `ssh-agent -s` ssh-add ~/.ssh/id_ed25519 cat ~/.ssh/id_ed25519.pub

Теперь в браузере нужно открыть

https://github.com/settings/keys

И сохранить туда вывод последней команды (cat) как New SSH key

Теперь можно выполнить первый push.

Самый первый push нужно делать с опцией -u

git push -u origin main

Warning: Permanently added 'github.com' (ED25519) to the list of known hosts. Enumerating objects: 15, done. Counting objects: 100% (15/15), done. Delta compression using up to 24 threads Compressing objects: 100% (13/13), done. Writing objects: 100% (15/15), 1.49 KiB | 1.49 MiB/s, done. Total 15 (delta 3), reused 0 (delta 0), pack-reused 0 remote: Resolving deltas: 100% (3/3), done. To github.com:AndreiOlegovich/merge_demo.git * [new branch] main -> main Branch 'main' set up to track remote branch 'main' from 'origin'.

После этого на GitHub появляется содержимое моего локального репозитория.

alt
merged main и feature
Визуализация в PyCharm

Автор статьи: Андрей Олегович

Похожие статьи
Git
branch: Ветки
merge: Слияние
Конфликты

РЕКЛАМА хостинга Beget, которым я пользуюсь более десяти лет

Изображение баннера

Конец рекламы хостинга Beget, который я всем рекомендую.

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящую по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: