Примеры Merge и Rebase
Исходный вариант
Схема коммитов до объединения веток
xeon@srv-wiki:~/repo01$ git log0
* 73912d4636966d - (2026-06-23 17:30:1722:21:09 +0300) 06:03: develop - shion (origin/develop, develop)
* 1a0d152f14df09 - (2026-06-23 17:30:0722:21:09 +0300) 05:02: develop - shion
* b26f2d91d50cc3 - (2026-06-23 17:29:5422:21:09 +0300) 04:01: develop - shion
| * ac8476ad0d431a - (2026-06-23 17:26:5622:20:17 +0300) 06: main - shion (HEAD -> main, origin/main)
| * 2d61c3a7a67bef - (2026-06-23 17:26:4722:20:17 +0300) 05: main - shion
| * 2d66eb021598f9 - (2026-06-23 17:26:3622:20:17 +0300) 04: main - shion
|/
* f57227eb67be77 - (2026-06-23 17:26:2122:20:17 +0300) 03: main - shion
* f95e3333e40570 - (2026-06-23 17:25:5522:20:17 +0300) 02: main - shion
* e48b68d96cfdef - (2026-06-23 17:19:1022:20:17 +0300) 01: main - shion
Git Merge
Вариант 1. Приоритет Main
git checkout main
# Включаем режим union-слияния для файла code.txt
echo "code.txt merge=union" > .gitattributes
# Слияние ветки develop с приоритетом изменений main
git merge -Xours develop -m "Merge branch 'develop'"
rm .gitattributes
Слияние ветки develop с приоритетом изменений main
Commit-ы develop продолжаются только после commit-ов main
Хронология ветки main корректная
* 2d13fb959f2fd6 - (2026-06-23 18:15:1923:13:39 +0300) Merge branch 'develop' - shion (HEAD -> main)
|\
| * 73912d4636966d - (2026-06-23 17:30:1722:21:09 +0300) 06:03: develop - shion (origin/develop, develop)
| * 1a0d152f14df09 - (2026-06-23 17:30:0722:21:09 +0300) 05:02: develop - shion
| * b26f2d91d50cc3 - (2026-06-23 17:29:5422:21:09 +0300) 04:01: develop - shion
* | ac8476ad0d431a - (2026-06-23 17:26:5622:20:17 +0300) 06: main - shion
(origin/main)
* | 2d61c3a7a67bef - (2026-06-23 17:26:4722:20:17 +0300) 05: main - shion
* | 2d66eb021598f9 - (2026-06-23 17:26:3622:20:17 +0300) 04: main - shion
|/
* f57227eb67be77 - (2026-06-23 17:26:2122:20:17 +0300) 03: main - shion
* f95e3333e40570 - (2026-06-23 17:25:5522:20:17 +0300) 02: main - shion
* e48b68d96cfdef - (2026-06-23 17:19:1022:20:17 +0300) 01: main - shion
code.txt
01: main
02: main
03: main
04: main
05: main
06: main
04: develop
05: develop
06: develop
Вариант 2. Приоритет Develop
git checkout develop
# Включаем режим union-слияния для объединения строк файла code.txt
echo "code.txt merge=union" > .gitattributes
# Слияние ветки main с приоритетом изменений develop
git merge -Xtheirs main -m "Merge branch 'main' into develop"
rm .gitattributes
Слияние ветки main с приоритетом изменений develop
Commit-ы develop перемещаются на место commit-ов main на тот момент времени
Commit-ы main продолжаются только после commit-ов develop
Хронология ветки develop нарушена
xeon@srv-wiki:~/repo01$ git log0
* 580fa3344e20bd - (2026-06-23 18:29:2323:15:02 +0300) Merge branch 'main' into develop - shion (HEAD -> develop)
|\
| * ac8476ad0d431a - (2026-06-23 17:26:5622:20:17 +0300) 06: main - shion (origin/main, main)
| * 2d61c3a7a67bef - (2026-06-23 17:26:4722:20:17 +0300) 05: main - shion
| * 2d66eb021598f9 - (2026-06-23 17:26:3622:20:17 +0300) 04: main - shion
* | 73912d4636966d - (2026-06-23 17:30:1722:21:09 +0300) 06: develop - shion (origin/develop)
* | 1a0d152 - (2026-06-23 17:30:07 +0300) 05:03: develop - shion
* | b26f2d9f14df09 - (2026-06-23 17:29:5422:21:09 +0300) 04:02: develop - shion
* | 1d50cc3 - (2026-06-23 22:21:09 +0300) 01: develop - shion
|/
* f57227eb67be77 - (2026-06-23 17:26:2122:20:17 +0300) 03: main - shion
* f95e3333e40570 - (2026-06-23 17:25:5522:20:17 +0300) 02: main - shion
* e48b68d96cfdef - (2026-06-23 17:19:1022:20:17 +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
Вариант 1. Приоритет Main
git checkout develop
git rebase -Xours main
Перебазируем commits ветки develop на ветку main
Ветка develop "налипает" поверх последнего commit ветки main
Commits ветки develop пересоздаются с новыми hash и date от последнего commit ветки main
Хронология ветки develop обновлена
xeon@srv-wiki:~/repo02$ git log0
* ba0822d - (2026-06-23 22:43:43 +0300) 03: develop - shion (HEAD -> develop)
* 1acbd5f - (2026-06-23 22:43:43 +0300) 02: develop - shion
* 8d1882b - (2026-06-23 22:43:43 +0300) 01: develop - shion
* d0d431a - (2026-06-23 22:20:17 +0300) 06: main - shion (main)
* 7a67bef - (2026-06-23 22:20:17 +0300) 05: main - shion
* 21598f9 - (2026-06-23 22:20:17 +0300) 04: main - shion
* b67be77 - (2026-06-23 22:20:17 +0300) 03: main - shion
* 3e40570 - (2026-06-23 22:20:17 +0300) 02: main - shion
* 96cfdef - (2026-06-23 22:20:17 +0300) 01: main - shion
Вариант 2. Приоритет Develop
git checkout main
git rebase -Xours develop
Перебазируем commits ветки main на ветку develop
Ветка develop "втискивается" между 3им и 4ым commit ветки main согласно дате создания
Ветка main "выталкивается" поверх последнего commit ветки develop.
Commits ветки main пересоздаются с новыми hash и date от последнего commit ветки develop
Хронология ветки main обновлена
xeon@srv-wiki:~/repo01$ git log0
* bd67ed5 - (2026-06-23 22:25:15 +0300) 06: main - shion (HEAD -> main)
* 081c081 - (2026-06-23 22:25:15 +0300) 05: main - shion
* 99388ca - (2026-06-23 22:25:15 +0300) 04: main - shion
* 636966d - (2026-06-23 22:21:09 +0300) 03: develop - shion (develop)
* f14df09 - (2026-06-23 22:21:09 +0300) 02: develop - shion
* 1d50cc3 - (2026-06-23 22:21:09 +0300) 01: develop - shion
* b67be77 - (2026-06-23 22:20:17 +0300) 03: main - shion
* 3e40570 - (2026-06-23 22:20:17 +0300) 02: main - shion
* 96cfdef - (2026-06-23 22:20:17 +0300) 01: main - shion
Основное требование при использовании git rebase:
ЗАПРЕЩЕНО производить git rebase с ветками которые вы уже отправили в общий репозиторий!