PurpleSchool — курсы программирования онлайн
  • Пути
    • Frontend React разработчик
    • Frontend Vue разработчик
    • Backend разработчик Node.js
    • Fullstack разработчик React / Node.js
    • Mobile разработчик React Native
    • Backend разработчик Golang
    • Devops инженер
    • Backend разработчик Python
  • AI для кодаНовое
  • О нас
    • Отзывы
    • Реферальная программа
    • О компании
    • Контакты
  • Иконка открытия меню
    • Сообщество
    • PurpleПлюс
    • AI Собеседование
    • AI тренажёр
    • Проекты
PurpleSchool — платформа бесплатных roadmap и курсов для разработчиков
ютуб иконка
Telegram иконка
VK иконка
VK иконка
Курсы
ГлавнаяКаталог курсовFrontendBackendFullstack
Практика
КарьераПроектыPurpleПлюс
Материалы
БлогБаза знаний
Документы
Договор офертаПолитика конфиденциальностиПроверка сертификатаМиграция курсовРеферальная программа
Реквизиты
ИП Ларичев Антон АндреевичИНН 773373765379contact@purpleschool.ru

PurpleSchool © 2020 -2026 Все права защищены

  • Курсы
    • FrontendИконка стрелки
    • AI разработкаИконка стрелки
    • BackendИконка стрелки
    • DevOpsИконка стрелки
    • MobileИконка стрелки
    • ТестированиеИконка стрелки
    • Soft-skillsИконка стрелки
    • ДизайнИконка стрелки
    Иконка слояПерейти в каталог курсов
  • Бесплатно
    • Курсы
    • JavaScript Основы разработкиPython Основы PythonCSS CSS FlexboxКарта развитияВопросы для собеседований
    • База знанийИконка стрелки
    • Новостные рассылкиИконка стрелки
  • PurpleSchool — курсы программирования онлайн
    • AI для кодаНовое
    • Сообщество
    • PurpleПлюс
    • AI Собеседование
    • AI тренажёр
    • Проекты
    Главная
    Сообщество
    Git rebase vs merge: когда и как правильно выбирать

    Git rebase vs merge: когда и как правильно выбирать

    Аватар автора Git rebase vs merge: когда и как правильно выбирать

    Антон Ларичев

    Иконка календаря23 июня 2026
    gitrebasemergeсистема контроля версийкомандная разработкаmiddleИконка уровня middle
    Картинка поста Git rebase vs merge: когда и как правильно выбирать

    Введение

    Git предоставляет два основных способа интеграции изменений из одной ветки в другую: merge и rebase. Оба решают одну задачу, но делают это по-разному, и выбор между ними напрямую влияет на чистоту истории репозитория и удобство работы в команде.

    В этой статье разберём, как работает каждый инструмент, в каких ситуациях применять rebase, а когда лучше остановиться на merge, и каких ошибок следует избегать.

    Как работает git merge

    Команда git merge объединяет две ветки, создавая новый коммит слияния — merge commit. Этот коммит имеет двух родителей: последний коммит текущей ветки и последний коммит ветки, которую мы вливаем.

    # Переключаемся на основную ветку
    git checkout main
    
    # Вливаем ветку с функциональностью
    git merge feature/user-auth
    

    После выполнения этой команды история будет выглядеть так:

          A---B---C  feature/user-auth
         /         \
    D---E---F---G---H  main (коммит слияния H)
    

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

    Преимущества merge

    Слияние через merge неразрушительно — оно никогда не изменяет существующие коммиты. Это делает его самым безопасным способом интеграции изменений. История репозитория отражает реальный ход разработки: видно, когда была создана ветка, кто и что делал параллельно.

    Как работает git rebase

    Команда git rebase переносит все коммиты текущей ветки так, будто она была создана не от старой точки, а от вершины другой ветки. При этом создаются новые коммиты с теми же изменениями, но другими хешами.

    # Переключаемся на ветку с функциональностью
    git checkout feature/user-auth
    
    # Переносим коммиты поверх main
    git rebase main
    

    История после rebase:

                   A'--B'--C'  feature/user-auth
                  /
    D---E---F---G  main
    

    Коммиты A, B, C превратились в A', B', C' — это новые объекты с теми же изменениями, но другими родителями и хешами.

    Преимущества rebase

    Главный плюс — линейная история без лишних merge-коммитов. После ребейса кажется, что работа велась последовательно, что упрощает просмотр через git log и поиск ошибок через git bisect.

    Интерактивный rebase

    Интерактивный режим — мощный инструмент для редактирования истории перед публикацией изменений.

    # Редактируем последние 3 коммита
    git rebase -i HEAD~3
    

    В открывшемся редакторе можно выбрать действие для каждого коммита:

    • pick — оставить как есть
    • squash — объединить с предыдущим
    • reword — изменить сообщение
    • drop — удалить коммит
    # Объединяем черновые правки перед отправкой пул-реквеста
    pick a1b2c3d Добавляем авторизацию через JWT
    squash e4f5a6b Правим опечатку в комментарии
    squash c7d8e9f Убираем отладочный console.log
    

    Результат — один чистый коммит вместо трёх, что делает историю пул-реквеста читаемой.

    Когда использовать merge

    Слияние публичных веток. Если ветка уже запушена и другие разработчики работают на её основе, merge — единственный безопасный вариант. rebase изменит хеши коммитов и сломает историю у коллег.

    Интеграция фич в main или develop. Merge-коммит служит явной отметкой о том, когда именно функциональность была влита. Это удобно при работе с релизами.

    Сохранение контекста. Когда важно понять, что изменения пришли из конкретной feature-ветки, merge-коммит даёт этот контекст.

    # Стандартное слияние feature в develop
    git checkout develop
    
    # Флаг --no-ff гарантирует создание merge-коммита даже при fast-forward
    git merge --no-ff feature/payment-module
    

    Когда использовать rebase

    Обновление локальной ветки. Когда main обновился, пока вы работали над фичей, ребейс позволяет подтянуть изменения без лишнего merge-коммита.

    # Обновляем main
    git checkout main
    git pull origin main
    
    # Переносим нашу ветку поверх обновлённого main
    git checkout feature/search
    git rebase main
    

    Чистка истории перед пул-реквестом. С помощью интерактивного ребейса можно объединить черновые коммиты в осмысленные единицы работы.

    Локальные эксперименты. Пока ветка существует только у вас, её можно свободно переписывать.

    Частые ошибки

    Rebase публичных веток

    Самая опасная ошибка — делать rebase ветки, которую уже видят другие разработчики. Это изменяет хеши всех коммитов, и при следующем git pull коллега получит конфликты или дублирующиеся коммиты.

    # ОПАСНО: если origin/feature уже используют другие разработчики
    git rebase main
    git push --force origin feature/shared-branch
    

    Правило простое: никогда не делайте rebase ветки, которая есть на удалённом сервере и которую используют другие.

    Потеря коммитов при force push

    После ребейса приходится делать git push --force. Без осторожности можно перезаписать чужие коммиты. Используйте более безопасный вариант:

    # Не перезапишет, если кто-то успел запушить после вас
    git push --force-with-lease origin feature/my-branch
    

    Бездумный squash

    Объединять коммиты перед мержем полезно, но не всегда. Если каждый коммит несёт смысловую нагрузку и может быть полезен для git blame или git bisect, оставьте их раздельными.

    Заключение

    Выбор между merge и rebase — это вопрос контекста. Для публичных веток и интеграции фич используйте merge: он безопасен и честен. Для поддержания чистоты локальной истории и подготовки пул-реквестов — rebase. Комбинируя оба подхода, вы получите историю репозитория, которая одновременно отражает реальную работу и остаётся удобной для чтения.

    Главное правило: не переписывайте историю, которую уже видят другие.

    Иконка глаза1

    Комментарии

    0

    Постройте личный план изучения TypeScript с нуля - полный курс и паттерны проектирования до уровня Middle — бесплатно!

    TypeScript с нуля - полный курс и паттерны проектирования — часть карты развития Frontend, Backend, Mobile

    • step100+ шагов развития
    • lessons30 бесплатных лекций
    • lessons300 бонусных рублей на счет

    Бесплатные лекции

    Лучшие курсы по теме

    изображение курса

    React и Redux Toolkit

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Практика в студииПрактика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.8
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    Zustand

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Практика в студииПрактика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.8
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    Neovim

    Антон Ларичев
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.8
    3 999 ₽ 6 990 ₽
    Подробнее

    Похожие статьи

    Картинка поста Что такое REST API и как его правильно проектировать
    Иконка аватараАнтон
    Иконка календаря22 июня 2026
    REST APIHTTPbackend+ 2juniorИконка уровня junior

    Что такое REST API и как его правильно проектировать

    REST API — архитектурный стиль для взаимодействия клиента и сервера. Разбираем принципы REST, HTTP-методы, проектирование маршрутов и типичные ошибки.

    Иконка чипа0
    Иконка глаза37
    Иконка комментариев0
    Картинка поста Основы Docker для разработчика: контейнеры, образы и тома
    Иконка аватараАнтон
    Иконка календаря20 июня 2026
    DockerDevOpsКонтейнеризация+ 1juniorИконка уровня junior

    Основы Docker для разработчика: контейнеры, образы и тома

    Основы Docker для разработчика: разбираем, что такое контейнеры, образы и тома, как их создавать и использовать в реальных проектах.

    Иконка чипа0
    Иконка глаза93
    Иконка комментариев0
    Картинка поста Event Sourcing на NestJS: реализация с нуля до продакшена
    Иконка аватараАнтон
    Иконка календаря19 июня 2026
    NestJSEvent SourcingCQRS+ 2seniorИконка уровня senior

    Event Sourcing на NestJS: реализация с нуля до продакшена

    Event Sourcing на NestJS: разбираем агрегаты, event store, проекции и снапшоты. Практический пример с кодом и типичные ошибки реализации.

    Иконка чипа0
    Иконка глаза121
    Иконка комментариев0
    Иконка чипа0