Vali Shah

Jako Vývojář, mnozí z nás muset vybrat mezi Merge a Rebase. Se všemi odkazy, které získáme z internetu, každý věří „nepoužívejte Rebase, mohlo by to způsobit vážné problémy.“Zde vysvětlím, jaké sloučení a rebase jsou, proč byste je měli (a neměli byste) používat a jak to udělat.

git Merge a git Rebase slouží stejnému účelu. Jsou navrženy tak, aby integrovaly změny z více větví do jednoho., Ačkoli konečný cíl je stejný, tyto dvě metody jej dosahují různými způsoby a je užitečné znát rozdíl, když se stanete lepším vývojářem softwaru.

tato otázka rozdělila komunitu Git. Někteří věří, že byste měli vždy rebase a další, které byste měli vždy sloučit. Každá strana má nějaké přesvědčivé výhody.

git Merge

slučování je běžnou praxí pro vývojáře používající systémy pro správu verzí. Ať už jsou větve vytvořeny pro testování, opravy chyb nebo z jiných důvodů, sloučení provede změny na jiném místě., Chcete-li být konkrétnější, sloučení vezme obsah zdrojové větve a integruje je s cílovou větví. V tomto procesu se změní pouze Cílová větev. Historie zdrojové větve zůstává stejná.,da2a4595a“>

Merge Master -> Funkce branch

Klady

  • Jednoduché a známé
  • Zachovává kompletní historii a chronologickém pořadí
  • Udržuje rámci pobočky

Zápory

  • Commit historie se může stát znečištěné spoustou sloučení zavazuje
  • Ladění pomocí git bisect může stát těžší

Jak na to

Sloučit větev master do větve funkcí pomocí checkout merge příkazy.,

$ git checkout feature$ git merge master(or)$ git merge master feature

tím se vytvoří nová „Merge commit“ ve větvi feature, která drží historii obou větví.

git Rebase

Rebase je další způsob, jak integrovat změny z jedné větve do druhé. Rebase komprimuje všechny změny do jediné “ opravy.“Pak integruje náplast na cílovou větev.

Na rozdíl od sloučení rebasing zplošťuje historii, protože převádí dokončené dílo z jedné větve do druhé. V tomto procesu je vyloučena nežádoucí historie.,

Rebases jsou jak změny by měly projít z horní části hierarchie směrem dolů, a spojí se, jak proudí sem nahoru

Rebase větve funkcí do master

Klady

  • Zjednodušuje potenciálně složité historie
  • Manipulace jediném odevzdání je snadné (např., navrací jim)
  • Zabraňuje merge commit „šum“ v rušné repo operace s práce větve
  • Čistí intermediate dopustí tím, že je jeden commit, které mohou být užitečné pro DevOps týmy

Zápory

  • Drtil funkce jen hrstku zavazuje může skrývat kontextu
  • Rebasing veřejných repozitářů může být nebezpečné, pokud pracují jako tým
  • je To víc práce: Pomocí rebase aby se vaše funkce pobočka aktualizovány vždy
  • Rebasing s dálkovým větve vyžaduje, abyste force push., Největším problémem, kterému lidé čelí, je, že nutí tlačit, ale nenastavili výchozí nastavení git push. Výsledkem jsou aktualizace všech větví se stejným názvem, lokálně i vzdáleně,a to je strašné.

Pokud jste rebase nesprávně a neúmyslně přepsat historii, to může vést k závažným otázkám, takže ujistěte se, že víte, co děláte!

jak to udělat

Rebase větve feature na hlavní větev pomocí následujících příkazů.,

$ git checkout feature$ git rebase master

tím se přesune celá větev feature na horní část hlavní větve. Provede to opětovným zapsáním historie projektu vytvořením zcela nových revizí pro každou revizi v původní (feature) větvi.

Interactive Rebasing

to umožňuje měnit commity při jejich přesunu do nové větve. To je silnější než automatizované rebase, protože nabízí úplnou kontrolu nad historií odevzdání pobočky. Obvykle se používá k vyčištění chaotické historie před sloučením větve funkcí do master.,

$ git checkout feature$ git rebase -i master

tím se otevře editor se seznamem všech odevzdání, které se mají přesunout.

pick 22d6d7c Commit message#1pick 44e8a9b Commit message#2pick 79f1d2h Commit message#3

to přesně definuje, jak bude větev vypadat po provedení rebázy. Opětovným uspořádáním entit můžete vytvořit historii tak, jak chcete. Například, můžete použít příkazy jako fixup squash edit atd., místo pick.

který z nich použít

tak co je nejlepší?, Co doporučují odborníci?

je těžké zobecnit a rozhodnout se o jednom nebo druhém, protože každý tým je jiný. Ale musíme někde začít.

týmy musí při nastavování zásad git rebase vs. merge zvážit několik otázek. Protože jak se ukázalo, jedna strategie pracovního postupu není lepší než druhá. Je závislá na vašem týmu.

zvažte úroveň rebasingu a kompetence Git napříč vaší organizací. Určete, do jaké míry si ceníte jednoduchosti rebasingu ve srovnání se sledovatelností a historií sloučení.,

a Konečně, rozhodnutí o sloučení a rebasing by měla být posuzována v kontextu jasné, větvení strategie (Viz tento článek pochopit, více o větvení strategie). Úspěšná strategie větvení je navržena kolem organizace vašich týmů.

co doporučuji?

jak tým roste, bude těžké řídit nebo sledovat změny vývoje s politikou vždy sloučení. Chcete-li mít čistou a srozumitelnou historii odevzdání, je použití Rebase rozumné a efektivní.,

vzhledem k následujícím okolnostem a pokynům se můžete z Rebase dostat nejlépe:

  • vyvíjíte se lokálně: pokud jste svou práci nesdíleli s nikým jiným. V tomto okamžiku byste měli upřednostňovat rebasing před sloučením, aby byla vaše historie uklizená. Pokud máte osobní vidličku úložiště a která není sdílena s jinými vývojáři, můžete ji bezpečně restartovat i poté, co jste tlačili na pobočku.
  • váš kód je připraven ke kontrole: vytvořili jste požadavek pull. Jiní přezkoumávají vaši práci a potenciálně ji načítají do své vidlice pro místní recenzi., V tomto okamžiku byste neměli svou práci rebase. Měli byste vytvořit revizi „přepracovat“ a aktualizovat větev funkcí. To pomáhá se sledovatelností v požadavku pull a zabraňuje náhodnému poškození historie.
  • přezkum se provádí a je připraven k integraci do cílové větve. Gratuluji! Chystáte se odstranit větev funkcí. Vzhledem k tomu, že ostatní vývojáři nebudou načítat-slučování v těchto změnách od tohoto okamžiku, to je vaše šance dezinfikovat svou historii., V tomto okamžiku můžete přepsat historii a složit původní commity a ty otravné‘ pr přepracování ‚a‘ merge ‚ zavazuje do malé sady soustředěných commitů. Vytvoření explicitního sloučení pro tyto revize je volitelné, ale má hodnotu. Zaznamenává, kdy funkce absolvovala master.

závěr

doufám, že toto vysvětlení dalo nějaké poznatky o git merge a git rebase. Merge vs rebase strategie je vždy diskutabilní. Ale možná tento článek pomůže rozptýlit vaše pochybnosti a umožní vám přijmout přístup, který funguje pro váš tým.