Как Git може да ви помогне
Статията предполага, че вече сте запознати с git и основните функции, но за всеки случай нека освежим паметта ви:
Добавяне на файл към зоната на сцената:
Премахване на директория от индекса:
Замяна на последния фиксиране:
Създаване на нов клон от текущия ангажимент:
Създайте нов клон при фиксиране X и преминете към него:
Преместване на клон X за ангажиране Y:
Обединете текущия клон от посочения:
Пренастройте текущия клон за фиксиране:
Отхвърляне на промените в индекса:
Връщане на промените в работната директория:
Пренастройте ВСИЧКИ клонове!
(Използвайте git && не използвайте клонове) == изобщо не използвайте git. Когато работите с клонове, git ви позволява да правите страхотни неща.
Например сте работили върху набора от функции stringUtils, след това сте преминали към поправяне на грешки и сте направили няколко фиксации и сега историята на вашите фикси изглежда така:
Докато поправяте грешки, получавате идеята, че би било чудесно да използвате функция, която сте ангажирали с C2, като в същото време не се нуждаете от промени в C3.
Използваме cherry-pick - прилагане на промени от всеки ангажимент към текущия ангажимент:
След успешното отстраняване на грешката, вие правите нов ангажимент и след това обединявате клоните:
Имайте предвид, че git не прилага повторно C2 - само C4-C6.
Хрумва ви, че ангажиментът C6 прави твърде много промени и би било хубаво да го разделите на две. Преди това се отървете от клона stringUtils и преименувате bugFix на trunk.
git rebase -i
Интерактивното пребазиране не само ви позволява да разделите един ангажимент на няколко, но също така:
- „Свиване“ ангажименти (скуош и поправяне);
- редактирайте описанието на ангажимента (преформулирайте);
- пренареждане на ангажименти;
- изпълнява команди или скриптове на черупки между операции по сливане.
Например историята на фиксирането ви изглежда така:
Пребазирате C4 на C0:
Позволете ми да ви напомня, че ако възникне конфликт по време на пребазирането, след разрешаването му трябва да изпълните:
След приключване на пребазирането историята ви ще изглежда така:
Git предлага удобен инструмент за отстраняване на грешки - bisect.
Да предположим, че сте направили поредица от ангажименти и сега историята ви изглежда така:
В сегашното си състояние приложението се срива и не знаете кой коммит се е объркал. Използвайки бисект, лесно можете да разберете кой е виновен и какво да правите.
След това git ще ви каже колко фиксации все още има за проверка и преместване на HEAD към средния фиксатор: bisect използва двоичен алгоритъм за търсене. Казваме на git дали грешката се възпроизвежда в текущия фиксация или не, със съответните лоши/добри команди и чрез log2N стъпки (в най-лошия случай) намираме първия „грешен“ фиксиране.
За да завършите състоянието на търсене и да се върнете в първоначалната позиция HEAD, се обадете:
Откъсната глава
След като изпълним командата:
ще бъдем на предишния коммит bf61378. HEAD сега сочи директно към самия ангажимент, а не към клона: HEAD -> bf61378:
По същество ние сме вътре анонимен клон: ако направим няколко фиксации, тогава историята ще изглежда така:
Извършените тук ангажименти са висящи ангажименти - можете да се позовавате на тях само ако знаете техния SHA-1; те не са част от историята на нито един клон. Такива фиксирания се съхраняват най-малко няколко седмици, след което се отстраняват от git колекционера на боклук .