4 návyky, jak udržet historii bez merge commitů
Jak sloučit větev do hlavní linie bez merge commitu Pro dokončení práce použijte git merge --ff-only, pokud je vaše větev přímým potomkem cílové větve. Pokud není, můžete ji nejdřív rebasovat na cílovou větev a pak teprve sloučit fast-forward. Tím se do historie dostanou vaše commity jeden za druhým, bez zbytečného uzlu. Některé nástroje pro code review umožňují sloučit pull request takzvaným rebase and merge nebo squash and merge. Squash vytvoří jeden nový commit, což je čisté, ale ztratíte dílčí historii. Rebase and merge zachová jednotlivé commity, ale vyžaduje, aby byly dobře pojmenované a dávaly smysl i samostatně.
Kontrola je jednoduchá. Vezměte dva kusy, bouchněte jimi o sebe. Suché dřevo zní dutě a praská, mokré vydává tupý zvuk. Nebo naštípněte kus a přiložte na řez vlhkoměr – hodnota nad dvacet procent znamená, že do kamen nepatří. Praskliny na čelech a uvolněná kůra jsou známkou, že dřevo už schne. Během zimy občas hromadu zkontrolujte, jestli se někde nedrží voda nebo sníh.
Lineární historie není cíl sám o sobě. Usnadňuje čtení, zjednodušuje hledání chyb pomocí git bisect a zrychluje orientaci v projektu. Pokud ale tým nemá disciplínu v commitování a pojmenování, rebase problém nevyřeší. Začněte malými kroky: jeden týden jen rebase při pullu, další týden fast-forward při sloučení. Až se to vžije, přidejte ochranu hlavní větve. Vyhnete se tak jednorázovému přepisu historie, který obvykle skončí zmatkem a ztracenou prací.
Světlo jako první nástroj, ne jako poslední Jedno stropní svítidlo uprostřed malé předsíně je nejčastější chyba. Vrhá světlo dolů, stěny nechává ve stínu a prostor ještě ztmaví. Místo toho použijte dvě až tři menší světla: jedno nad zrcadlem, jedno u dveří, případně bodovku v botníku. Teplota světla kolem 3000 K je pro předsíň příjemná, studené bílé světlo nad 4000 K působí v malém prostoru chladně a ostře. Pokud máte okno nebo prosklené dveře, nikdy je nezakrývejte tmavým závěsem. Stačí lehká roleta nebo jen čiré sklo.
U textilního čela platí, že čím jemnější tkanina, tím méně vydrží. Samet a velur se mají vysávat měkkým nástavcem jednou za dva týdny, jinak se prach zatlačí do vlasu a látka ztvrdne. Tkané směsi s polyesterem snesou vlhčený hadr, ale nikdy ne mokrý. Skvrny řešte okamžitě, dokud nezaschnou – stačí vatový tampon a vlažná voda s kapkou prostředku na nádobí. Alkohol a univerzální čističe na bázi rozpouštědel barvu často vytáhnou nebo zanechají mapu.
Zrcadlo patří tam, kde chytí denní svět
Zrcadlo je v předsíni nejsilnější nástroj, ale jen když visí správně. Postavte ho naproti oknu nebo naproti zdroji světla. Pak se světlo odrazí zpět do místnosti a předsíň se opticky prodlouží. Zrcadlo na boční stěně udělá jen to, že se v něm při odchodu zkontrolujete. Největší chybou je malé zrcátko nad botníkem — to prostor nerozšíří, jen zabere místo. Použijte zrcadlo vysoké, ideálně od podlahy ke stropu, nebo alespoň do výšky očí. Rám volte tenký, světlý nebo úplně bez rámu.
Odpočinek v chladu je půlka úspěc
Pro týmovou shodu je klíčové, aby hlavní větev byla chráněná a přijímala jen fast-forward. Většina platforem to umí nastavit v pravidlech větve. Zároveň je potřeba domluvit, kdo a kdy smí rebasovat. Pokud někdo pošle větev do vzdáleného repozitáře a jiný si ji stáhne, další rebase je riskantní. Řešením je krátkodobé větve, které žijí jen do sloučení. Čím déle větev existuje, tím větší je šance, že se rozjede s hlavní linií a rebase bude bolet.
Konflikty při rebase se řeší stejně jako při merge, jen s tím rozdílem, že je opakujete pro každý commit. To může být zdlouhavé, pokud jich je mnoho. Pomáhá rebasovat průběžně, ne až na konci. Také je vhodné nastavit git config --global rerere.enabled true, což si Git zapamatuje řešení konfliktů a příště je zopakuje automaticky. Pozor na to, že rebase mění hash commitů. Pokud na vaší větvi visí nějaký tag nebo na ni odkazuje jiná větev, po rebasi přestane platit.
Základem je rebase místo merge při aktualizaci vlastní větve. Když vyvíjíte funkci na větvi odvozené od hlavní linie, použijte git pull --rebase místo běžného git pull. Tím se vaše lokální commity přenesou na aktuální vrchol a vznikne přímá posloupnost. Před rebase je nutné mít čistý pracovní adresář, jinak Git odmítne pokračovat. Typická chyba je rebase větve, kterou už někdo jiný stáhl a postavil na ní práci. V takovém případě se historie přepíše a kolega dostane konflikty, které nedávají smysl. Proto platí: rebasujte jen to, co ještě nikdo nepoužil.
Merge commity vznikají ve chvíli, kdy dvě větve mají rozdílné změny a Git je spojuje. Pokud tým chce lineární historii, musí se změnit způsob práce, ne jen přepnout konfiguraci. Nejde o to merge úplně zakázat, ale vytvořit návyky, které mu předcházejí. Každý člen týmu potřebuje vědět, co dělat, když se větve rozejdou, a co se stane, když se pravidla nedodrží.