Když tým přestane merge commitovat, historie se vyčistí
Základem je práce s více zdroji najednou. Otevřete si několik kartiček v prohlížeči nebo použijte srovnávač, ale vždy si ověřte, zda srovnávač uvádí skutečně konečnou cenu. Některé porovnávače zobrazují cenu bez dopravy nebo bez povinných poplatků. Potom stačí přejít na samotný e-shop a zjistit, kolik stojí doručení. U menších nákupů může být levnější produkt nakonec dražší než ten o pár korun dražší s dopravou zdarma.
Pracovní místo je druhá nejčastější příčina sporů. Dvě židle u jednoho stolu fungují jen do chvíle, kdy si oba potřebují psát. Lepší je zajistit dvě samostatné plochy, i kdyby jedna byla skládací deska u postele. Na stůl patří lampa s vlastním vypínačem pro každé místo. Společné světlo nad stolem znamená, že jeden budí druhého. Stejně tak zásuvky: prodlužovačka vedená přes celý pokoj je nejen nepořádek, ale i riziko zakopnutí. Každá zóna by měla mít vlastní přístup k elektřině.
Nezapomeňte, že rebase není všelék. U velkých týmů s dlouho běžícími větvemi může být rebase bolestivý kvůli častým konfliktům. V takovém případě je lepší merge, ale s vědomím, že historie bude obsahovat merge commity. Kompromisem je rebase feature branch na main před každým mergem a následný fast-forward merge. Tím získáte lineární historii i bez merge commitů. Vždy ale komunikujte – pokud někdo jiný pracuje na stejné větvi, rebase může způsobit zmatky.
Merge commity vznikají pokaždé, když sloučíte dvě větve a Git vytvoří nový commit se dvěma rodiči. Většina týmů je používá automaticky, protože to je výchozí chování. Jenže právě tyto commity zanechávají v historii šum: každá aktualizace z hlavní větve do feature branch vygeneruje další merge commit, a při zpětném čtení historie není poznat, co bylo skutečnou prací a co jen sléváním. Řešením je rebase místo merge při integraci změn.
Další častá chyba je zapomenout na věrnostní programy a kupóny. Mnoho e-shopů nabízí slevu na první nákup nebo slevový kód, který se nepropíše do srovnávače. Před dokončením objednávky zkuste do vyhledávače zadat název obchodu a slovo „kupón" nebo „slevový kód". Někdy stačí jeden kód a ušetříte víc než hledáním nejnižší ceny. Pozor ale na podvodné stránky, které slibují slevy výměnou za osobní údaje.
Porovnávání cen v e-shopech vypadá jednoduše, dokud se do toho nezačne plést doprava, dostupnost a různé varianty produktu. Nejčastější chyba je porovnávat jen číslo u produktu a ignorovat celkovou cenu. Právě v ní se skrývají stovky korun rozdílu. Než začnete porovnávat, ujasněte si přesný model, velikost, barvu a další parametry. Jinak srovnáváte hrušky s jablky a výsledek je k ničemu.
Noční stolek málokdy slouží jen na lampu a sklenici vody. Pokud ho používáte jako odkladiště knih, brýlí a nabíječek, dřív nebo později zjistíte, že se na něm čte špatně. Nejčastější chyba není malá plocha, ale to, že stolek stojí příliš daleko od postele a světlo míří mimo stránku. Než začnete cokoli kupovat, změřte si, v jaké výšce a úhlu se při čtení opíráte o loket. Právě podle toho se stolek nastavuje.
Základní postup je jednoduchý. Před sloučením feature branch do hlavní větve proveďte git rebase main. Tím se vaše commity přehrají na aktuální špičku main a vytvoří lineární historii. Pokud během rebase narazíte na konflikty, Git vás vyzve k jejich vyřešení. Po každém vyřešení spusťte git add a git rebase --continue. Když chcete rebase přerušit, použijte git rebase --abort. Nikdy nerebasujte commity, které už byly odeslány do sdílené větve, pokud si nejste jisti, že je nikdo jiný nepoužívá.
Pro vynucení lineární historie v týmu nastavte ochranu větve. Většina platforem umožňuje zakázat merge commity nebo vyžadovat rebase před sloučením. Lokálně to podpoříte konfigurací git config --global pull.rebase true a git config --global rebase.autoStash true. Při sloučení pull requestu pak použijte možnost „Rebase and merge" nebo „Squash and merge", pokud chcete jediný commit. Squash je vhodný pro malé úpravy, rebase zachová jednotlivé commity.
Typická chyba je rebase po pullu. Představte si, že jste si stáhli změny z remote a pak rebasujete. Git může vytvořit duplicitní commity nebo vás donutit řešit stejný konflikt dvakrát. Řešení: před rebase vždy proveďte git fetch a rebasujte na origin/main, ne na lokální main, který může být zastaralý. Také si dejte pozor na git pull --rebase – v některých konfiguracích vytváří merge commity, pokud není nastaveno pull.rebase true.
Rebase není merge: pozor na sdílené větve Rebase mění historii tím, že vytváří nové commity s novými hash. Pokud někdo jiný už má vaši větev staženou a vy ji přepíšete, jeho lokální kopie se rozejde s tou vaší. Při dalším pullu pak uvidí konflikty, které nedávají smysl. Proto platí: rebasujte pouze své lokální commity, které ještě nikdo jiný nemá. U sdílených větví (main, develop) používejte merge nebo lépe fast-forward only. Pro feature branch, na které pracujete sami, je rebase bezpečný.