5 pravidel pro lineární historii větví bez merge commitů
Základní pravidlo zní: čím méně hmoty, tím větší prostor. Pokud stěna nemusí být plná, nahraďte ji prosklenou příčkou nebo alespoň průhledovým pásem v horní části. Sklo propustí denní světlo z okna do chodby a chodba přestane působit jako tmavá klícka. Pozor na mléčné nebo pískované sklo – to sice zachová soukromí, ale světlo rozptýlí jen částečně. Největší efekt má čiré sklo v kombinaci se závěsem, který lze v případě potřeby zatáhnout.
Označování krabic je místo, kde se šetří čas nejvíc. Nalepte na každou krabici dvě etikety – jednu s cílovou místností a patrem, druhou se seznamem obsahu a jménem odpovědné osoby. Nepište jen „kancelář", ale konkrétně „účetní, skříň č. 3, druhé patro". Křehké věci a kabely balte zvlášť a barevně je odlište. Servery a datová úložiště přepravujte v originálních obalech nebo v odpružených kufrech, nikdy volně na vozíku.
Jídlo a pití na noc držte jednoduché. Sladkosti a bublinky znamenají časté buzení a ranní únavu. Banán, suchý rohlík nebo voda stačí. Pokud host jí něco jinak než vaše dítě, domluvte se s jeho rodiči předem, ne až u stolu. Ráno připravte snídani, kterou zvládne i nejistý jedlík: pečivo, máslo, džem, ovoce. Nic, co by vypadalo jako test odvahy.
Posledním krokem je sloučení do main bez merge commitu. Existují dvě možnosti: fast-forward, kdy se hlavní větev jen posune na váš vrchol, nebo takzvaný squash, kdy se všechny vaše commity sloučí do jednoho. Fast-forward zachová jednotlivé commity, squash je nahradí jedním. Volba závisí na tom, jak detailní historii chcete. Ať zvolíte cokoli, výsledkem je lineární řada commitů bez merge uzlů. To oceníte při hledání chyby nástrojem git bisect, protože každý krok je jeden commit a není třeba řešit, kterou větev vlastně testujete.
Hygiena a oblečení patří na jedno místo, ne rozeseté po celém bytě. Připravte ručník, kartáček v obalu a místo, kam se dá odložit oblečení. Pokud má host pyžamo, ať ho má ráno na stejném místě, kde si ho večer sundal. Typická chyba je nechat děti, aby si všechno řešily samy. Malý host se nestydí zeptat doma, ale tady mlčí a pak hledá kartáček po šuplících. Ukažte mu to večer, ne ráno.
Šikmý strop v ložnici nebo pracovně lidé často řeší tak, že ho prostě obestaví skříňmi nebo nechají prázdný. Přitom právě nízká strana podkroví nabízí místo, které jinde v bytě chybí. Rozhodující je výška, ve které se strop láme. Změřte si ji metrem u zdi a v polovině místnosti. Pokud je nízká hrana nižší než 90 cm, nepočítejte s ničím, co potřebuje prostor pro tělo vsedě ani na stojato. Do takového pásu patří jen úložné boxy, zásuvky a police.
Kdy rebase bolí a jak tomu předejít Rebase přepisuje historii. Pokud už jste svou větev pushnuli na sdílený remote a kolega si ji stáhl, přepis mu rozbije lokální kopii. Proto platí: rebasujte jen to, co ještě není ve sdíleném repozitáři. Pro vzdálenou větev použijte git push --force-with-lease, nikdy ne obyčejný --force. Rozdíl je zásadní: --force-with-lease odmítne push, pokud někdo mezitím na remote něco přidal, takže nepřepíšete cizí práci. Pokud tým pracuje na jedné větvi společně, rebase je špatný nástroj a je lepší se domluvit na jiném postupu.
Základem je rebase místo merge při aktualizaci vlastní větve. Když na feature větvi pracujete déle, hlavní větev mezitím odjede dopředu. Místo git merge main použijte git rebase main. Git vezme vaše commity, dočasně je odloží, přesune větev na nový vrchol main a commity znovu přehraje. Výsledek je lineární: žádný merge commit, žádné dvojité rodiče. Podmínkou je, že svou větev máte pouze lokálně a nikdo jiný na ní nepracuje.
Merge commity vznikají ve chvíli, kdy do sebe sloučíte dvě větve, které se od sebe mezitím rozešly. Pro týmový vývoj to znamená jednu nepříjemnost: historie přestává být čitelná. Každý merge commit je místo, kde se ztrácí informace o tom, kdo co skutečně napsal a v jakém pořadí. Řešením je udržovat historii lineární tím, že změny před sloučením vždy přenesete na aktuální vrchol cílové větve. Následující pravidla popisují, jak to dělat bez zbytečných konfliktů a jak se vyhnout typickým chybám.
Lineární historie není dogma. Je to nástroj pro týmy, kde se na jedné větvi střídá více lidí a kde je rychlá orientace v commitech důležitější než přesné zachování větvení. Pokud tato podmínka neplatí, merge commity ničemu nevadí. Rozhodněte se jednou a držte se toho v celém týmu, jinak vznikne mix, ve kterém se nevyzná nikdo.
Před sloučením do hlavní větve používejte interaktivní rebase: git rebase -i main. Nabídne vám seznam commitů, které můžete sloučit, přejmenovat nebo zahodit. Sloučením několika commitů do jednoho odstraníte šum typu „oprava překlepu" a „ještě jedna úprava". Výsledná historie pak obsahuje jeden smysluplný záznam pro jednu logickou změnu. Pozor na commity, které už jsou na remote v hlavní větvi, ty nikdy nepřepisujte.