В тази статия ще говоря за това как работи Git rebase, разликите между Git rebase и Git merge и как да работя с Git rebase. И така, нека започнем.
Git Rebase:
Да приемем, че имате Git хранилище с комитите A, Б, ° С в майстор клон. След това създадохте нов клон някакъв клон и добави 2 нови ангажименти д и Е към някакъв клон клон.
Фигура 1: първоначална история на фиксиране.
Да кажем, че сте забравили да добавите нещо в майстор клон. И така, връщате се към майстор клон и добавете нов ангажимент G към майстор клон. Вашата git история трябва да изглежда както следва.
Фигура 2: история на фиксиране след добавяне на фиксиране G в главния клон.
Всичко изглежда добре. Сега, ако искате всички промени, които сте направили в някакъв клон клон да бъде в майстор клон, можете да обедините някакъв клон клон до майстор клон. Ето какво е git сливане направете.
Ами ако искате ангажирането G да бъде на разположение в някакъв клон клон? Е, можете да използвате git rebase за това.
От историята на фиксирането на фиг. 2 можете да видите, че клонът някакъв клон започва от фиксирането ° С. Ако направите git rebase на някакъв клон, тогава ще започне от фиксирането G както е показано на фигура 3 по-долу. Имайте предвид, че съдържанието на фиксацията д и Е ще се промени и след операцията по пребазиране. Ангажиментите д и Е ще включва промените в фиксацията G. Ето защо добавих * символ преди фиксирането д и Е.
Ако искате да знаете как би изглеждала историята на фиксирането, ако я обединя, погледнете фигура 4. Включих го само за да можете да го сравните с git rebase.
Фигура 4: история на фиксиране, ако се използва git merge.
След като вече знаете какво е git rebase, разликата между git rebase и git merge и защо git rebase го използва, ще ви покажа как да го използвате в следващия раздел на тази статия по-долу.
Работен поток на Git Rebase:
В този раздел ще създам ново git хранилище на моя локален компютър и ще ви покажа как работи git rebase. Препоръчвам ви да разберете добре git rebase, преди да го приложите във вашия проект.
Първо, създайте ново хранилище на Git rebase-demo / на вашия компютър, както следва:
$ git init rebase-demo
Сега отидете до rebase-demo / директория, както следва:
$ cd rebase-demo /
Сега създайте нов файл тест.текст както следва:
$ echo "A"> тест.текст
Тестът.txt файлът съдържа само един ред A. Да кажем, това е вашият първоначален код на проекта.
Сега ангажирайте промените, както следва:
$ git add .$ git commit -m 'A'
Сега добавете още един ред Б към тест.текст файл, както е показано на екранната снимка по-долу.
Сега ангажирайте промените, както следва:
$ git add .$ git commit -m 'B'
Сега, нека добавим още един ред C към тест.текст файл.
Освен това ангажирайте промените, както следва:
$ git add .$ git commit -m 'C'
Сега историята на фиксиране на главния клон трябва да изглежда както следва:
$ git log --oneline
Сега, да речем, имате няколко нови идеи, които искате да изпробвате. Така че, нека създадем и направим плащане към нов клон нова функция както следва:
$ git checkout -b нова функция
Сега добавете новата си идея (линията д да кажем) на тест.текст файл.
Сега ангажирайте промените, както следва:
$ git add .$ git commit -m 'D'
Сега добавете реда E към тест.текст файл.
Ангажирайте промените, както следва:
$ git add .$ git commit -m 'E'
Сега, историята на фиксиране на нова функция клонът трябва да изглежда както следва:
$ git log --onelineВижте как са ангажиментите в ред А < B < C < D < E?
Сега си спомняте, че сте забравили да добавите нещо към майстор клон, в който също сте искали да бъдете в нова функция клон! Така че, плащане до майстор клон.
Добавих нов ред в края на тест.текст файл, както можете да видите.
Сега ангажирайте промените, както следва:
$ git add .$ git commit -m 'G'
Сега, историята на фиксиране на майстор клон трябва да изглежда така.
A < B < C < G
Сега, за да преосмислите ангажиментите от майстор клон до нова функция клон, първо плащане до нова функция клон.
$ git checkout нова функция
Сега направете git rebase на майстор клон, както следва:
$ git rebase master
Някои конфликти на сливане! Нека поправим това.
Е, промените, които направих в ангажимента G и д са в конфликт помежду си. Искам да запазя и двете.
След отстраняване на конфликта на сливане, тест.текст файлът трябва да изглежда както следва:
Сега добавете промените към подреждането, както следва:
$ git add .
Сега продължете да преработвате, както следва:
$ git rebase --continue
Пореден конфликт на сливане! Е, това може да се случи. Rebase променя историята на git commit. И така, подобни неща се очакват.
Изглежда, че процесът на сливане е неуспешен поради някои празни редове. Нека поправим това.
След отстраняване на конфликта на сливане, тест.текст файлът трябва да изглежда както следва.
Сега добавете промените към подреждането, както следва:
$ git add .
Сега продължете операцията по пребазиране, както следва:
$ git rebase --continue
Git rebase е завършен.
Както можете да видите, историята на фиксиране на клона с нова функция се актуализира. Сега историята на фиксиране е както следва:
A < B < C < G < D < EТочно както се очакваше.
Финалът тест.текст файлът трябва да изглежда както следва.
Git rebase е мощен инструмент. Но никога не трябва да го използвате в споделени хранилища на Git. Използвайте го само в хранилищата на Git, които работите само. В противен случай ще се сблъскате с много проблеми по пътя.
И така, вие използвате git rebase. Благодаря, че прочетохте тази статия.