Тони ganch

Git rebase: ред в местните клонове

Най-честият въпрос, който попадна в разговори за Git: «Защо се нуждаете от rebase и как да го използвам?"

Основната цел на rebase - възстановяването на реда.
Ако често направи ангажират-грешки, а след това са шокирани каква бъркотия става в бранша - този отбор ще стане ваш любим.

Важно! Rebase струва това, само ако все още не сте се бутам промените в по-отдалечени клонове.
Тази операция се записва върху SHA (ID) извърши, така че другите потребители няма да са толкова лесни за макарата редакциите си.

Нека видим как можете да "четка" история.

Промяна на съобщение до ангажират

Тони ganch
Вярно е история. Eugene, здравей!

Да предположим, че имаме хранилище X с такава история:

Ако имате нужда да се коригира не се ангажират последната (или няколко), ние ще преформулира.

За да започнете да се определи това, което искате да редактирате ангажира.
В нашия случай това е първия, втория и четвъртия.
Моля, започнете Git rebase, като се базира на последните 4 ангажира:

Различията между главата

HEAD ^ и може да се прочете на git-scm.com.

Забележка обратен ред: от горе до отида стар ангажира дъно - пресни.
Замяна в правилната мотика за извършване на R или преформулира:

И на свой ред правото на всяко съобщение.

В резултат на това, ние получаваме следната история:

Премахнете ненужните ангажират

Това се случва, че сте направили някаква работа, но това не се налага.
Или искате да направите няколко ангажира направена преди една седмица, в отделна нишка, както и премахване на ток.

Последни N, извършва лесно да се отстраняват с нулиране.
Например, за да се премахне последният се ангажира:

Изтриване на 7:

При желание комит обезпаразитено пътя си между другото, стартирайте rebase:

И просто да изтриете ненужни линия (за нашия пример ние приемаме най-горната част):

Комбинирайте няколко ангажира в една

Имам нужда от скрипт, който, когато аз съм като Git ангажират, автоматично ще използвате предишната извършване на съобщението, суфикс с с "истински".

Със сигурност сте били през това и преди:

Това, изглежда, е коригирана е грешка, но намери нещо ново.
И отново.
И отново.

От една страна, можете да оставите всичко както си е.
Все пак, ако някога ви се наложи да се връщам на промените, които трябва да се откажете от целия пакет ангажира вместо един.
И историята не изглежда много чист.

Git ангажират --amend - добър отбор, но само за актуализация на късно се ангажират.
rebase. от своя страна, е в състояние да се комбинират няколко ангажира, дори ако те не следват последователно една с друга.

Така например, направи 6 ангажира 2 е съвсем проста.
Започнете rebase:

Ако попитате smordzhit Git ангажират, по подразбиране ще се присъединят към нея с предишния.
Тъй като ние не ми харесва, трябва първо да промени приоритетите на ангажира.
Просто сменяте линии:

Следващата стъпка е подобен на преименуване: ние замени мотика да е (fixup) или S (тикви), в зависимост от желания резултат.

Ако сте избрали скуош. ГИТ ще ви даде още една възможност да редактирате съобщението до финала ангажират.

Резултатът е една красива история:

автоматизиране на сливането

Процесът на обединяване може да бъде опростено.
Да кажем, че вашата история сега се състои от две задължава да:

Вие сте коригиран няколко файлове и искате да инжектират тези промени да се ангажират с фиксирана # 4.
Не да се занимава с ръчна настройка, можете да го направите:

123 456 в този случай = SHA ангажират, което ние искаме да се влеят промени.

Git създава ангажират съобщение с fixup! Отстранен # 4.
Да направим няколко промени, но този път се ангажират подготви скуош:

Когато всичко е готово, стартирайте rebase:

Виж: Git ангажират себе си сложи всичко в правилния ред и в същото време да заменят знамето на мотика в дясно.

Историята ще доведе до една и съща мрежа:

Сплит един ангажират няколко

Обратното на предишната ситуация: вие сте направили един куп промени, затвори 8 Таско, но са хвърлили всичко за извършване на 2:

овалваме в случай на нужда, че ще бъде трудно - твърде много зависимости.
И код revyueru не завиждам.
Решението е просто: акции ангажира логически части:

Трябва да отбележим, че се ангажират да се разбият, за редактиране дума:

Git абортира комит Fix # 1. и да се спре.
На следващо място, ние имаме пълна свобода на действие.
Прекъсване на извършване:

По желание добавете файловете, свързани с първата задача:

Да направим първата ангажират:

Повторете на вкус:

Когато резултатът ни удовлетворява, възобновяване rebase:

Повторете тези стъпки няколко пъти, можете да получите най-доброто от подробна история:

заключение

Rebase - прекрасен и мощен инструмент.
Основното нещо - не се страхувайте.
техники, описани по-горе, ще ви помогнат да направите историята разбираемо, но част от заявката за светлина.
Опитайте се да ги използват преди следващата ол-ин.