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
Визуализация коммитов
На диаграмме визуализирована наша текущая ситуация: с момента выделения ветки feature из ветки main ветка
feature получила два коммита а ветка main один коммит.
Существует множесто инструментов, которые позволяют визуализировать ветки. В
PyCharm
это выглядит следующим образом:
Визуализация в 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(-)
Слияние произошло без конфликтов , поэтому дополнительных действий не требуется.
Слияние веток обычно иллюстрируют следующим оригинальным образом:
Визуализация в gitnuro
Визуализация в 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
Визуализация в PyCharm
Визуализация в 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 появляется содержимое моего локального репозитория.
Визуализация в PyCharm
Автор статьи: Андрей Олегович
| Git | |
| branch: Ветки | |
| merge: Слияние | |
| Конфликты |