Kdy se vyplatí historie bez merge commitů?
Atmosféra je další nepřítel. I za jasné noci se vzduch vlní a obraz se chvěje. Pomůže trpělivost: nafoťte 50–100 snímků v rychlém sledu a pak vyberte ty nejostřejší. Skládejte je v programu na skládání snímků – výsledek bude detailnější než jeden frames. Pokud nechcete skládat, použijte alespoň zpožděnou spoušť nebo samospoušť, abyste zabránili otřesu při stisku.
Rebase, nebo squash? Rebase přepíše jednotlivé commity tak, že vypadají, jako by vznikly až nad aktuálním main. Squash naproti tomu sloučí celou větev do jednoho commitu. Squash je vhodný pro malé úpravy, dokumentaci nebo opravy překlepů. Rebase se hodí, když chcete zachovat logické kroky, které mají vlastní hodnotu. V obou případech platí, že výsledná historie neobsahuje merge commit a je lineární.
Jak docílit hladké konzistence a správné bar
Jak nastavit fotoaparát, aby úkaz nesplynul s obloh
Nejčastější chyba je rebase veřejné větve. Jakmile větev odešlete na vzdálený server a někdo si ji stáhne, přepis historie způsobí kolegovi konflikty, které se těžko vysvětlují. Pravidlo zní: rebase pouze na větvi, kterou máte jen vy. Pokud už musíte přepsat sdílenou větev, použijte git push --force-with-lease, nikdy ne obyčejný --force. Force-with-lease ověří, že na serveru mezitím nikdo nic nepřidal.
Skladujte šampon v suchu, mimo přímé světlo a teplo. V koupelně na okraji vany vydrží jen několik týdnů, protože vlhkost ho rozleptá. Bylinkový odvar bez konzervace se může zkazit, proto ho používejte čerstvý a šampon spotřebujte do dvou měsíců. Pokud se na povrchu objeví bílé skvrny nebo zatuchlý pach, celou dávku vyhoďte. Nejméně příjemná chyba je přidat do směsi vodu z kohoutku místo odvaru. Minerály a chlór mění strukturu a šampon pak pění jen slabě.
Lineární historie není cíl, ale prostředek. Ulehčuje hledání chyb pomocí git bisect, zrychluje code review a zmenšuje počet konfliktů. Pokud tým nemá jasná pravidla, vzniká zmatek a zbytečné přepisování. Sepište si krátký dokument, kde bude uvedeno, kdy rebase, kdy squash a jak řešit konflikty. Potom už jen stačí pravidla dodržovat a historie se sama zjednoduší.
Prvorepubliková kina v Praze nebyla jen místem pro film. Byla to architektura, která měla návštěvníka vtáhnout už před začátkem představení. Když dnes vstoupíte do dochovaného sálu z dvacátých nebo třicátých let, poznáte to podle tří věcí: výšky stropu, tvaru balkonu a způsobu, jakým je řešeno světlo. Tyto prvky nejsou náhodné. Odpovídají na otázku, jak se má člověk cítit, když sedí ve tmě mezi cizími lidmi.
Merge commity vznikají pokaždé, když do hlavní větve sloučíte jinou větev pomocí výchozího příkazu git merge. V historii pak vidíte dva rodiče a šum, který ztěžuje čtení. Týmy, které chtějí lineární historii, používají rebase nebo squash. Nejde o módní výstřelek, ale o dohodu, kterou je potřeba nastavit dřív, než se větev rozroste.
Další pastí je příliš mnoho commitů typu „oprava" nebo „wip". Před odesláním větve je vhodné je pospojovat pomocí git rebase -i. Interaktivní režim nabídne pick, squash, fixup a reword. Squash spojí commity a nechá vás upravit zprávu, fixup spojí commity a zahodí jejich zprávy. Reword pouze upraví text. Tím se historie pročistí a zůstanou jen smysluplné celky.
Základem je rebase lokální větve na aktuální main. Postup je jednoduchý: přepnete se na svou větev, spustíte git fetch origin a pak git rebase origin/main. Pokud narazíte na konflikt, Git zastaví rebase, vyřešíte soubory, přidáte je přes git add a pokračujete příkazem git rebase --continue. Když se něco pokazí, git rebase --abort vrátí vše do původního stavu. Tento krok dělejte pouze u větví, které ještě nejsou sdílené s ostatními.
V týmu je nutné sladit nástroje i pravidla. Někteří používají git pull --rebase, jiní mají rebase nastavený v konfiguraci. Rozdíly vznikají také v tom, zda se povoluje fast-forward. Pokud chcete lineární historii, nastavte na hlavní větvi git config merge.ff only. Tím se zakáže vytváření merge commitů při běžném pullu. Pro nové větve používejte krátké názvy a mažte je po sloučení, ať se v repozitáři nehromadí mrtvé větve.