Автор оригинала: FreeCodeCamp Community Member.
Вали Шах
Как разработчик, многие из нас должны выбрать между объединением и ребазой. Со всеми ссылками мы получаем из Интернета, все считают, что «не используйте ребазу, это может вызвать серьезные проблемы». Здесь я объясню, что слияние и ребазу, почему вы должны (и не должны) использовать их, а как это сделать.
Git Merge и Git Rebase обслуживают ту же цель. Они предназначены для интеграции изменений с нескольких ветвей в один. Хотя окончательная цель такая же, эти два метода достигают его по-разному, и это полезно знать разницу, как вы становитесь Лучший разработчик программного обеспечения.
Этот вопрос разделил сообщество Git. Некоторые считают, что вы всегда должны ребазировать и другие, которые вы всегда должны слиться. Каждая сторона имеет некоторые убедительные преимущества.
Git Merge
Объединение – это обычная практика для разработчиков, использующих системы управления версиями. Создаются ли филиалы для тестирования, исправлений ошибок или других причин, объединение обменивается изменениями в другое место. Чтобы быть более конкретным, объединение принимает содержимое источника ветви и интегрирует их с целевой веткой. В этом процессе изменяется только целевая ветвь. История источника источника остается прежней.
Плюс
- Простые и знакомые
- Консервирует полную историю и хронологический порядок
- Поддерживает контекст филиала
Господин
- История совершения может быть загрязнена множеством слияния
- Отладка с использованием
Git Bisect
может стать сложнее
Как это сделать
Объединить главную ветку в филиал функции, используя Оформить заказ
и слияние
команды.
$ git checkout feature $ git merge master (or) $ git merge master feature
Это создаст новое « слияние Commitse » в филиале функции, которая содержит историю обеих ветвей.
Git Rebase.
Rebase – это еще один способ интеграции изменений с одной ветви в другую. Ребазу сжимает все изменения в один «патч». Затем он интегрирует патч на целевую ветку.
В отличие от объединения, пересадка сплющает историю, потому что она передает завершенную работу из одной ветви к другой. В процессе нежелательная история устраняется.
Плюс
- Оптимины потенциально сложная история
- Манипулирование единым фиксацией легко (например, возвращая их)
- Избегает слияния фиксации “шум” в занятых репос с оживленными ветвями
- Очищает промежуточные коммиты, делая их одним фиксацией, которые могут быть полезны для команд DevOps
Господин
- Раздавить функцию до горстки коммитов может скрыть контекст
- Передача публичных репозиториев может быть опасно при работе в качестве команды
- Это больше работы: используя ребазу, чтобы держать свою функциональную ветку обновляться всегда
- Передача с удаленными ветвями требует от вас сила толчок. Самая большая проблема с проблемами людей – они заставляют толкать, но не устанавливают Git push по умолчанию. Это приводит к обновлениям всех филиалов, имеющих то же имя, как локально, так и удаленно, и это ужасно иметь дело с.
Как это сделать
Передайте функцию ветвь на главной ветви, используя следующие команды.
$ git checkout feature $ git rebase master
Это перемещает всю функциональную ветку сверху главной ветви. Это делает это путем повторного написания истории проекта, создавая совершенно новые коммиты для каждого фиксации в оригинальном (функциональном) ветке.
Интерактивное перенапряжение
Это позволяет изменять коммиты, поскольку они перемещаются в новую ветку. Это более мощно, чем автоматизированная ребаза, поскольку он предлагает полный контроль над историей филиала. Как правило, это используется для очистки грязной истории, прежде чем объединять филиал объекта в Master.
$ git checkout feature $ git rebase -i master
Это откроет редактор, перечисляя все коммиты, которые собираются перемещать.
pick 22d6d7c Commit message#1 pick 44e8a9b Commit message#2 pick 79f1d2h Commit message#3
Это точно определяет, как будет выглядеть филиал после выполнения ребазы. Повторно заказа сущность, вы можете сделать историю похоже на то, что вы хотите. Например, вы можете использовать команды, такие как Fixup
, Сквош
, редактировать
и т. д., вместо Выберите
Отказ
Какой использовать
Так что лучше? Что рекомендуют эксперты?
Трудно обобщить и решить один или другой, поскольку каждая команда отличается. Но мы должны начать где-то.
Команды должны рассмотреть несколько вопросов при настройке политики Git Rebase vs. Потому что, как оказывается, одна стратегия рабочего процесса не лучше, чем другая. Это зависит от вашей команды.
Рассмотрим уровень пересадки и компетенции GIT в вашей организации. Определите степень, на которую вы цените простоту перенапряжения по сравнению с прослеживаемостью и историей объединения.
Наконец, решения о слиянии и перегрузке следует учитывать в контексте четкой стратегии ветвления ( См. Эта статья Подробнее о развлекательной стратегии). Успешная стратегия ветвления разработана вокруг организации ваших команд.
Что мне рекомендовать?
Когда команда растет, становится трудно управлять или следить за изменениями в разработке с Всегда слияние политики. Иметь чистую и понятную историю совершения, используя Ребазу является разумным и эффективным.
Учитывая следующие обстоятельства и руководящие принципы, вы можете получить лучше всего из Ребазе:
- Вы развиваетесь на месте: Если вы не поделились своей работой с кем-либо еще. На данный момент вы должны предпочесть пересаживание слияния, чтобы сохранить свою историю. Если у вас есть личный вилкой репозитория, и это не передается другим разработчикам, вы в безопасности выберетесь даже после того, как вы нажали в вашу ветку.
- Ваш код готов к просмотре: Вы создали запрос на тягу. Другие пересматривают вашу работу и потенциально представляют его в свою вилку для местного обзора. На данный момент вы не должны передать вашу работу. Вы должны создать «Rework» комбинируют и обновляют свою функциональную ветку. Это помогает от прослеживаемости в запросе на тягу и предотвращает случайное поломка истории.
- Обзор делается и готов быть интегрирован в целевую ветку. Поздравляю! Вы собираетесь удалить вашу функцию филиала. Учитывая, что другие разработчики не будут слияния в эти изменения с этой точки, это ваш шанс дезинфицировать вашу историю. На данный момент вы можете переписать историю и сложить первоначальные комбиниты, и эти PESKY ‘PR REWWARE’ и «Merge» совершают в небольшой набор сфокусированных коммитов. Создание явного слияния для этих коммитов не является обязательным, но имеет значение. Он записывает, когда функция окончила мастеру.
Заключение
Я надеюсь, что это объяснение дало некоторые идеи на Git Merge и Гитбаза. Стратегия Merge VS Rebase всегда спорно. Но, возможно, эта статья поможет развеять ваши сомнения и позволить вам принять подход, который работает для вашей команды.
Я с нетерпением жду записи на Git Workflows и концепции Гит Отказ Прокомментируйте темы, которые вы хотите, чтобы я написал о следующем. Ваше здоровье!
код = соревнование FFEE + департамент развитие
Школа кодирования для разработчиков программного обеспечения