Skip to main content

Примеры Merge и Rebase

                                                                                                                                                                  

Исходный вариант

Схема коммитов до объединения веток

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

Git Merge

Вариант 1.
git checkout main
git merge develop

Ветка MAIN

    Вливаем ветку develop в ветку main. Приоритет ветки main.


    Commit-ы develop продолжаются только после commit-ов 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

    Вариант 2. [зеркальный]
    git checkout develop
    git merge main

    Ветка DEVELOP

    • Вливаем ветку main в ветку develop. Приоритет ветки develop.
    • Commit-ы develop теперь идут на месте commit-ов main на тот момент времени.
    • Commit-ы main продолжаются только после commit-ов develop

    Хронология ветки 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

    Вариант 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 с ветками которые вы уже отправили в общий репозиторий.