Примеры Merge и Rebase
Git Merge
Исходный вариант.
Схема коммитов до объединения веток
xeon@srv-wiki:~/repo01$ git log0
* 73912d4 - (2026-06-23 17:30:17 +0300) 06: develop - shion (origin/develop, develop)
* 1a0d152 - (2026-06-23 17:30:07 +0300) 05: develop - shion
* b26f2d9 - (2026-06-23 17:29:54 +0300) 04: develop - shion
| * ac8476a - (2026-06-23 17:26:56 +0300) 06: main - shion (HEAD -> main, origin/main)
| * 2d61c3a - (2026-06-23 17:26:47 +0300) 05: main - shion
| * 2d66eb0 - (2026-06-23 17:26:36 +0300) 04: main - shion
|/
* f57227e - (2026-06-23 17:26:21 +0300) 03: main - shion
* f95e333 - (2026-06-23 17:25:55 +0300) 02: main - shion
* e48b68d - (2026-06-23 17:19:10 +0300) 01: main - shion
Вариант 1.
git checkout main
git merge develop
Ветка MAIN
- Вливаем ветку develop в ветку main. Приоритет ветки main.
- Недостающие коммиты из ветки develop как-бы "налипают сверху" на ветку main.
- Даты коммитов прежние.
* 2d13fb9 - (2026-06-23 18:15:19 +0300) Merge branch 'develop' - shion (HEAD -> main)
|\
| * 73912d4 - (2026-06-23 17:30:17 +0300) 06: develop - shion (origin/develop, develop)
| * 1a0d152 - (2026-06-23 17:30:07 +0300) 05: develop - shion
| * b26f2d9 - (2026-06-23 17:29:54 +0300) 04: develop - shion
* | ac8476a - (2026-06-23 17:26:56 +0300) 06: main - shion (origin/main)
* | 2d61c3a - (2026-06-23 17:26:47 +0300) 05: main - shion
* | 2d66eb0 - (2026-06-23 17:26:36 +0300) 04: main - shion
|/
* f57227e - (2026-06-23 17:26:21 +0300) 03: main - shion
* f95e333 - (2026-06-23 17:25:55 +0300) 02: main - shion
* e48b68d - (2026-06-23 17:19:10 +0300) 01: main - shion
code.txt
01: main
02: main
03: main
04: main
05: main
06: main
04: develop
05: develop
06: develop
01: main
02: main
03: main
04: main
05: main
06: main
04: develop
05: develop
06: develop
Вариант 2. [зеркальный]
git checkout develop
git merge main
Ветка DEVELOP
- Вливаем ветку main в ветку develop. Приоритет ветки develop.
- Недостающие коммиты из ветки main как-бы "налипают сверху" на ветку develop.
- Даты коммитов прежние.
xeon@srv-wiki:~/repo01$ git log0
* 580fa33 - (2026-06-23 18:29:23 +0300) Merge branch 'main' into develop - shion (HEAD -> develop)
|\
| * ac8476a - (2026-06-23 17:26:56 +0300) 06: main - shion (origin/main, main)
| * 2d61c3a - (2026-06-23 17:26:47 +0300) 05: main - shion
| * 2d66eb0 - (2026-06-23 17:26:36 +0300) 04: main - shion
* | 73912d4 - (2026-06-23 17:30:17 +0300) 06: develop - shion (origin/develop)
* | 1a0d152 - (2026-06-23 17:30:07 +0300) 05: develop - shion
* | b26f2d9 - (2026-06-23 17:29:54 +0300) 04: develop - shion
|/
* f57227e - (2026-06-23 17:26:21 +0300) 03: main - shion
* f95e333 - (2026-06-23 17:25:55 +0300) 02: main - shion
* e48b68d - (2026-06-23 17:19:10 +0300) 01: main - shion
code.txt
01: main
02: main
03: main
04: develop
05: develop
06: develop
04: main
05: main
06: main
Git Rebase
Исходный вариант.
Схема коммитов до перебазирования
Branches.clean.jpg
Вариант 1.
Ветка MAIN
- Перебазируем коммиты ветки develop в ветку main.
- Ветка main перестраивается от начала по приоритету ветки develop,
- Коммиты, которые имелись в ветке main, но отсутствуют во встраиваемой ветке develop
- пересоздаются с новым hash и датой от последнего нового коммита встраиваемой ветки develop
Develop.rebase.to.main.jpg
Вариант 2. [зеркальный]
Ветка DEVELOP
- Перебазируем коммиты ветки main в ветку develop
- Ветка develop перестраивается от начала по приоритету ветки main,
- Коммиты, которые имелись в ветке develop, но отсутствуют во встраиваемой ветке main
- пересоздаются с новым hash и датой от последнего нового коммита встраиваемой ветки main
Master.rebase.to.develop.jpg
Основное требование при использовании git rebase:
Не производить git rebase с ветками которые вы уже отправили в общий репозиторий.