Merge commity, které zbytečně zaplavují historii
Regály v obchodě vyrobte z proužků kartonu naolejovaných do „L" a vlepených do stran. Zboží nahraďte tím, co máte doma: prázdné kelímky od jogurtu, vyprané obaly od vajec, roličky od papírových utěrek. Ceny pište fixem na malé čtverečky a přilepte je na špejle zapíchnuté do kousku modelíny. U kuchyňky se osvědčily víčka od zavařovacích sklenic jako talíře a dřevěné vařečky místo příborů. Všechno, co se dá sundat a znovu nasadit, děti zaměstná déle než statická výzdoba.
Kdy rebase použít a kdy ho raději vynechat Rebase je bezpečný na větvích, které ještě nikdo jiný nepoužívá. Jakmile svou větev pushneš a kolegové na ní staví, rebase je zakázaný. Přepisovat veřejnou historii znamená, že ostatním přestanou fungovat jejich lokální kopie a budou muset řešit vynucený push. To je častý zdroj zmatku a ztracené práce. Pravidlo je jednoduché: rebase na soukromých větvích, merge nebo fast-forward na sdílených.
Nejčastější chyba je lití těsta na plech lžící. Věnečky potřebují tvar, který drží. Použijte cukrářský sáček s hvězdicovou tryskou a stříkejte kroužky o průměru asi pět centimetrů s dostatečným rozestupem. Plech vyložte pečicím papírem, žádné mazání tukem – tuk na plechu způsobí, že se spodek věnečků „smaží" a po vyndání zvlhne. Před pečením povrch jemně postříkejte vodou z rozprašovače, pomůže to rovnoměrnému nadzvednutí.
Děti potřebují viditelnou hranici. Kobereček, jiná barva podlahy, kus nábytku z boku nebo nízká police stačí. Hranice nesmí být vysoká a neprostupná, jinak se koutek stane trestem. Na druhé straně nesmí být tak volná, že se do ní okamžitě navalí hračky. Pomáhá pravidlo, že na pracovní ploše je vždy jen to, co patří k právě dělanému úkolu. Vše ostatní má své místo mimo koutek, i kdyby to bylo jen v krabici vedle.
Základem je rebase místo merge. Když dokončíš práci na své větvi, přepni se na ni a spusť příkaz, který přenese tvé commity na aktuální špičku cílové větve. Tím se vytvoří nové commity s novými hashi, ale obsah zůstane stejný. Před rebase si vždy ověř, že máš čistý pracovní adresář. Pokud máš necommitnuté změny, použij stash, jinak rebase selže nebo přijdeš o rozdělanou práci.
Dřevěný nábytek a kuchyňské prkénko nesnáší dvě věci: příliš mnoho vody a příliš suchý vzduch. Prkénko myjte ručně, nikdy v myčce, a po každém umytí ho postavte na hranu, aby oschlo ze všech stran. Jednou za měsíc ho potřete potravinářským olejem — tenká vrstva, nechat vsáknout, přebytek setřít. Nábytek stačí otírat vlhkým hadrem a jednou za čas přejít voskem nebo olejem podle povrchu. Co dřevo zabíjí, je mokrý hadr položený na desce a přímé slunce. Stejně tak mu škodí radiátor v zimě, kdy vzduch vysychá. Vložte do místnosti misku s vodou, nebo použijte zvlhčovač.
Rošt není jen mřížka, na kterou se položí matrace. Určuje, jak se váha rozloží, kam se odvádí vlhkost a jestli matrace vydrží svou tvrdost. Pokud zvolíte rošt špatně, i drahá matrace se po čase proleží nebo začne bolet záda. Rozhodující je proto typ matrace, hmotnost spáče a způsob, jakým se na postel ukládáte.
Největší chybou při snaze o lineární historii je zapomenutí na to, že fast-forward není vždy možný. Pokud větev obsahuje commity, které nejdou aplikovat na aktuální stav cílové větve, Git vytvoří merge commit i při použití merge. Řešením je rebase před sloučením. Další častá chyba je rebase příliš mnoha commitů najednou. Když jich je dvacet, konflikty se hromadí a řešení je nepřehledné. Lepší je rebase po menších částech nebo použít interaktivní rebase a commity rozdělit či sloučit.
Každý tým, který pracuje s Gitem denně, dříve nebo později narazí na historii plnou merge commitů. Vypadá to neškodně, dokud se nezačneš snažit dohledat, kdy a proč se konkrétní změna dostala do větve. Lineární historie bez merge commitů není jen estetická záležitost. Zásadně zjednodušuje code review, zkracuje dobu potřebnou k nalezení regrese a výrazně snižuje riziko konfliktů při zpětném sloučení do hlavní větve.
Poslední věc, kterou je potřeba hlídat, je reakce na konflikty během rebase. Když Git zastaví a oznámí konflikt, nepanikař. Otevři konfliktní soubory, vyřeš je, přidej je do indexu a pokračuj v rebase. Pokud si nejsi jistý, můžeš rebase kdykoli přerušit a vrátit se do původního stavu. Nikdy ale necommituj konfliktní značky. To je chyba, která se objeví až v produkci a odhalit ji může trvat dlouho.
Pro týmy, které chtějí konzistentní výsledek, se osvědčuje nastavit výchozí chování pro pull. Místo klasického pull, který vytváří merge commit, použij rebase variantu. Tím se při aktualizaci lokální větve tvé commity přenesou na nový základ a žádný zbytečný merge nevznikne. Stejně tak je vhodné zavést pravidlo, že před vytvořením pull requestu si autor sám provede rebase na cílovou větev. Ušetří to čas recenzentům i CI systému.