Git: использование и понимание перебазирования (rebase)

внешний интерфейс Git открытый источник продукт

Узнайте о git сегодняrebaseФункция, предполагается, что все уже знакомы с git, поэтому другие основы использования git объясняться не будут. Git — это инструмент, поэтому основная цель изучения — понять, что делают его функции, и здесь мы разберем их шаг за шагом.rebase(перебазировать).

Предположим, нам нужно создать ветку для разработки новых возможностей продукта,

 git checkout -b feature

Вы можете видеть, что на данный момент у нас всего две ветки и мы перешли наfeatureна ветке.

Далее мыfeatureИзмените содержимое в файле test.txt под веткой и добавьте в негоcontent_feature, сохраните и отправьте.

git add test.txt

git commit -m 'feature分支'

Ознакомьтесь с материалами ниже:

git log --graph --pretty=oneline --abbrev-commit 


В настоящее время,featureРазвитие функции филиала завершено, но иногда мы также можемmasterПод веткой внесите изменения в этот же файл. Как мы в это времяmasterСодержимое, добавленное в файл test.txt в ветке,content_master.

Также сохраните и отправьте.

git add test.txt

git commit -m 'master分支'


Далее наступает момент, когда мыfeatureПри разработке новых функций они объединяются в основную ветку.

git merge featture


Вы видите, что в объединенном контенте есть конфликты, нам нужно изменить его вручную. затем измените его наcontent_master_featureБар.


Затем повторите отправку, чтобы завершить слияние:

git add test.txt

git commit -m 'merge_master_feature'


Вы можете видеть, что слияние прошло успешно.

. . . . Наконец пришло время поговорить о rebase.

Перебазирование на самом деле является методом слияния веток. Если мы сможем переключиться наfeatureПосле разветвления используйтеgit reabse masterкоманда для слияния ветвей. Зачем переключаться на функциональную ветку? И что означает эта команда?

Во-первых, мы должны знать, что использованиеmergeПри слиянии это фактически трехстороннее слияние, то есть измененноеmasterфилиал иfeatureфилиал, до модификацииmasterфилиал какБазаобъединены. Пиратское изображение:


Можно считать, что c3 и c4 представляют соответственно修改后的masterфилиал,featureВетвь, а c2 до модификацииmasterВетка, как основа с3, с4.

посмотри на это времяrebase变基Разве это имя не просто меняет основу? Так кто же делает базовую ветку? Снова украсть картинку:


Как видите, мы используем c3 в качестве основы, когда修改后masterфилиал, иfeatureИзменения отрасли напрямую влияют наmasterветвь, образуя новуюmasterветвь с4'. Команды для их реализации:

git checkout feature

git rebase master


Как и прежде, сначала нужно разрешить конфликт, и решение предоставляется нам.

git add test.txt

git rebase --continue

В настоящее время,feature(c4')филиал с修改后的master(c3)Изменения на основе филиалов.
Затем вы можете вернуться кmasterветку и быстро объединить две ветки.

$ git checkout master
$ git merge feature


Говоря об этом, я хочу немного поругать людей, верно?mergeПока что? хотетьrebaseПочему это так хлопотно? ? Пожалуйста, фото ниже:

Слияние без перебазирования:


Слияние после перебазирования:


Ну да, эффект ребазинга естьУрезанная история, объединенная история ветвей с основной линией.

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

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

Ссылаться на:

Руководство по официальному веб-сайту Git

Подробное объяснение великого бога