Введение
Есть много способов работы с git, если они чисты и не наносят ущерба, вероятно, большинство из них хороши.
Но так же, как пробел против табуляции, в мире ИТ идет война между поклонниками git rebase и поклонниками git merge.
Есть масса аргументов по поводу:
-Какой способ лучше?
-Кто чище?
-Как удобнее?
-Какой из них дает более чистый git-граф?
-Почему это важно, и какой из них более опасен?
В этой статье я объясню вам несколько различий между git merge, git rebase и git интерактивной перебазировкой.
Расскажу немного о том, какие плюсы и минусы (лучше или хуже вариантов нет, в основном в IT, есть просто предпочтения).
Я также постараюсь ответить на несколько наиболее часто задаваемых вопросов о них.
Пойдем!
Если вы предпочитаете видео, вот версия для YouTube.
Перебазировать с помощью Git:
Как работает git rebase
Когда мы разрабатываем функции, мы обычно создаем ветвь функций из нашей основной ветки.
Мы используем git rebase, когда хотим взять все коммиты из нашей функциональной ветки и переместить их в основную ветку.
Этот тип git rebase не даст нам столько возможностей для манипулирования каждым коммитом, а возьмет их все и переместит к месту назначения.
Чтобы лучше контролировать все коммиты, стоит взглянуть на интерактивную перебазировку git, которая даст нам гораздо больше возможностей для настройки.
Как вы разрабатываете перебазирование
Запустить git rebase очень просто, и нам нужна всего одна строка кода внутри нашего терминала.
Мы можем разработать rebase, набрав:
git checkout feature-branch git rebase your-main-branch(for example master or develop)
Как исправить конфликты перебазирования
Я хотел бы показать вам два способа решения конфликтов с помощью rebase.
Решить конфликт с git:
Вы можете решать конфликты вручную, добавлять файлы:
git add
и введите
git rebase --continue
Пропустить фиксацию:
Вы можете пропустить фиксацию, набрав:
git rebase --skip
Безопасна ли git rebase
Если мы знаем, что делаем, да, git rebase безопасен.
В любом случае, мы должны заботиться.
Потому что, даже если мы не причиним большого ущерба, кик-ребейз может поставить нас в трудоемкое путешествие по устранению проблемы.
Почему git rebase опасен
Git rebase может быть немного опасным, когда мы делаем это неосторожно.
Особенно в проекте цейтнота.
Здесь нужно использовать силовой толчок, и это переписывает часть истории.
Конечно, есть возможность отменить кик-ребейз. Тем не менее, это занимает немного больше времени, чем, например, просто откат коммитов.
Персонажи Git rebase
-Чистый график git
- Более легкий доступ к одному, единственному коммиту
-Чистая основная ветка
Минусы перебазирования Git
-При перебазировании пульта вам нужно использовать принудительное нажатие
-Может быть опасным, потому что переписывает историю
-Не очень легко для новичков
-При обычном ребейзе у нас не так много возможностей манипулировать коммитами
Интерактивная перебазировка Git:
Как работает интерактивная перебазировка git
Интерактивная перебазировка Git очень похожа на обычную перебазировку.
Это дает нам видимый редактор, который может помочь нам легко управлять каждым коммитом, поэтому мы не слепы с коммитами, которые мы перемещаем.
Это особенно полезно с большими ветками, большими репозиториями и не очень чистой историей git.
Пример интерактивной перебазировки Git
Чтобы выполнить интерактивную перезагрузку git, нам нужно выполнить те же шаги, что и с обычной, введите свой терминал:
git checkout feature-branch git rebase -i your-main-branch(for example master or develop)
Далее вы увидите список коммитов, для каждого из которых вы сможете выбрать один из методов:
-pick, you will keep and push commit to the main -reword, you will change the message of the commit -edit, that means you will be able to edit the commit -squash, commits with that method will be squashed into one -fixup, similar to squash, but you will delete log of the commit -drop, it will remove a commit
Профессионалы интерактивной перебазировки Git
-То же, что и обычная перебазировка
-Хороший редактор, который дает нам возможность легче манипулировать каждым коммитом
-Мы можем быстро очистить беспорядок в истории нашего репо
Git интерактивные минусы перебазирования
-Похоже на обычную перезагрузку
Слияние с помощью Git
Как работает git merge
Git merge — это метод, который берет все содержимое нашей текущей ветки и помещает его в нашу целевую ветку.
Например, мы можем объединить нашу функциональную ветку с нашей главной веткой.
В этом случае git создаст новый коммит слияния и возьмет весь контент (история, код, коммиты) из функциональной ветки и поместит все это в нашу основную ветку.
В чем разница между слиянием и перебазированием
Основное различие между слиянием и перебазированием заключается в том, что перебазирование создает очень чистый и дружественный git-граф, а слияние может генерировать что-то вроде граф-спагетти.
Как выполнить слияние git
Мы можем сделать это тремя способами.
Первый метод представляет собой комбинацию выборки и слияния.
В основном используется для слияния основной ветки внутри вашей ветки для разрешения локальных конфликтов перед созданием мерж-реквестов в ваших приложениях, таких как GitHub или BitBucket.
Вытягивающий:
git checkout feature-branch git pull origin your-main-branch(for example master or develop)
Объединение:
git checkout feature-branch git merge your-main-branch(for example master or develop)
Должен ли я перебазировать перед слиянием
Вы можете сделать rebase, чтобы раздавить ваши коммиты, и немного очистить свой gitflow.
Затем вы можете выполнить слияние и получить чистый график.
Профи слияния с помощью Git
-Скоростной способ соединения веток
-Легко для всех
-Очень легко вернуться при ударе ногой
Минусы Git слияния
-Не чистые логи
-Git график и история не очень чистые
- Отладка с использованием методов git, таких как bisect, может быть более сложной.
Заключение
Поздравляем, теперь вы мастер git rebase!
Я не скажу вам, какой из них лучше, потому что каждый проект индивидуален. Некоторые из них большие, и в течение многих лет, некоторые из них находятся в цейтноте, некоторые компании много заботятся о качестве, а некоторые не заботятся вообще.
В любом случае, теперь вы должны уметь распознавать, какой из них лучше подходит для вашего типа проекта, каковы его плюсы, минусы и опасности.
Надеюсь, я объяснил вам основные моменты между этими тремя основными методами обновления веток, и у вас не возникнет проблем с их использованием в дальнейшем.
Если у вас остались вопросы или вы хотите, чтобы я написал статью на интересующую вас тему, не стесняйтесь оставлять комментарии!
Спасибо за чтение,
Радек из Дуомли