Vyřešení konfliktů při slučování

Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019

Visual Studio 2019 | Visual Studio 2022

Při sloučení nebo opětovném vytvoření základu říkáte Gitu, aby integroval změny provedené v jedné větvi se změnami provedenými v jiné větvi. Git často provádí sloučení nebo opětovné vytvoření základu automaticky bez vaší pomoci. Pokud ale Git zjistí, že změna provedená v jedné větvi je v konfliktu se změnou provedenou v jiné větvi, zobrazí se výzva k vyřešení konfliktu. Ke konfliktu při slučování může dojít, když sloučené větve upravují stejný řádek souboru jinak nebo když jedna větev upraví soubor a jiná větev ho odstraní. Proces řešení konfliktů při slučování platí pro sloučení Gitu i pro opětovné vytvoření základu.

Konflikty při slučování můžete vyřešit v sadě Visual Studio nebo pomocí příkazového řádku a libovolného textového editoru.

Přehled pracovního postupu Gitu najdete v kurzu Gitu pro Azure Repos.

Tento článek obsahuje postupy pro následující úlohy:

  • Vysvětlení konfliktů při slučování
  • Vyřešení konfliktů při slučování

Vysvětlení konfliktů při slučování

Sloučení nebo změna základu Gitu integruje potvrzení ze zdrojové větve do aktuální místní větve (cílová větev). Sloučení Gitu provádí rychlou nebo rychlou hromadnou korespondenci. Sloučení bez rychlého přeposlání se také označuje jako trojcestné sloučení nebo skutečné sloučení. Git rebase je dalším typem sloučení. Tyto typy sloučení jsou znázorněny v následujícím diagramu.

Diagram znázorňující před a po potvrzení při použití sloučení Gitu a opětovného základu Gitu

Pokud v případě sloučení Gitu existuje tip cílové větve ve zdrojové větvi, bude výchozím typem sloučení rychlé sloučení. V opačném případě bude výchozí typ sloučení bez rychlého přeposlání.

Rychlé sloučení nikdy nemůže mít konflikt při slučování, protože Git nepoužije rychlé sloučení, pokud se špička cílové větve rozbíhají od zdrojové větve. Git ve výchozím nastavení používá rychlé sloučení, kdykoli je to možné. Git například použije rychlou hromadnou korespondenci na místní větev, kterou aktualizujete, a to tak, že stáhne z větve vzdáleného protějšku.

Sloučení bez rychlého přeposílání vygeneruje novou cílovou větev "potvrzení sloučení", která integruje změny zdrojové větve se změnami cílové větve. Platné změny jsou změny provedené po posledním potvrzení, které je společné pro obě větve. V předchozím diagramu je potvrzení C posledním společným potvrzením v obou větvích. Pokud jakákoli změna zdrojové větve koliduje s jakoukoli změnou cílové větve, Git vás vyzve k vyřešení konfliktu při slučování. Potvrzení sloučení (L) obsahuje integrované zdrojové větve a změny cílové větve. Tipy ke zdrojové a cílové větvi (K a E) jsou nadřazené potvrzení sloučení. V historii potvrzení vaší větve je potvrzení sloučení užitečnou značkou pro operaci sloučení a jasně ukazuje, které větve byly sloučeny.

Git znovu naváže historii potvrzení cílové větve tak, aby obsahoval všechna potvrzení zdrojové větve následované všemi potvrzeními cílové větve od posledního společného potvrzení. V předchozím diagramu je potvrzení C posledním společným potvrzením v obou větvích. Dalším způsobem, jak ji zobrazit, je, že rebase přehrává změny v cílové větvi nad historií zdrojové větve. Pokud jakákoli změna zdrojové větve koliduje s jakoukoli změnou cílové větve, Git vás vyzve k vyřešení konfliktu při slučování. Stejně jako u rychlého sloučení nevytváří základ potvrzení sloučení. Zejména změna základu změní sekvenci existujících potvrzení cílové větve, což není případ ostatních strategií sloučení. V předchozím diagramu obsahuje potvrzení K stejné změny jako K, ale má nové ID potvrzení, protože odkazuje zpět na potvrzení E místo jazyka C.

Sloučení a změna základu Gitu upraví jenom cílovou větev – zdrojová větev zůstane beze změny. Když dojde k jednomu nebo více konfliktům při slučování, musíte je vyřešit, abyste dokončili sloučení nebo znovu naslouchali. Nebo můžete operaci sloučení nebo obnovení zrušit a vrátit cílovou větev do předchozího stavu.

Další informace o možnostech a strategiích sloučení najdete v referenčních příručkách Gitu a strategiích sloučení Gitu.

Kdy vyřešit konflikty při slučování

Sloučení Gitu a rebase Gitu se ve velkém rozsahu používají v pracovním postupu Gitu. Při práci na místní funkci nebo větvi opravy chyb je běžné:

  1. Udržujte místní main větev aktuální se svým vzdáleným protějškem tím, že pravidelně táhnete a sloučíte vzdálené potvrzení.
  2. Integrujte aktualizace místní main větve do místní větve funkcí pomocí opětovného základu nebo sloučení.
  3. Zálohujte svou práci na místní větvi funkcí tak, že ji nasdílíte do odpovídající vzdálené větve.
  4. Po dokončení funkce vytvořte žádost o přijetí změn pro sloučení vzdálené větve funkcí do vzdálené main větve.

Díky časté integraci vzdálených změn do místního úložiště můžete mít přehled o nedávné práci ostatních a okamžitě vyřešit případné konflikty při slučování.

Vyřešení konfliktů při slučování

Proces řešení konfliktů při slučování se dá použít pro sloučení Gitu i pro rebase Gitu. I když následující kroky popisují, jak vyřešit konflikty při slučování během sloučení, můžete podobně vyřešit konflikty při sloučení během opětovného základu.

Tip

Pokud je zdrojovou větví větev pro vzdálené sledování , ujistěte se, že je větev aktuální spuštěním gitového načtení před sloučením. Nebo spusťte příkaz git pull , který kombinuje načtení Gitu se sloučením Gitu.

Visual Studio 2022 poskytuje prostředí pro správu verzí Git pomocí nabídky Git, změn Gitu a kontextových nabídek v Průzkumník řešení. Visual Studio 2019 verze 16.8 také nabízí uživatelské rozhraní Git Team Exploreru. Další informace najdete na kartě Visual Studio 2019 – Team Explorer .

  1. V podokně Větve v okně Úložiště Git zkontrolujte cílovou větev. Potom klikněte pravým tlačítkem na zdrojovou větev a zvolte Sloučit <zdrojovou větev> do <cílové větve>.

    Snímek obrazovky s možností Sloučit v místní nabídce větve v okně úložiště Git v sadě Visual Studio

  2. Visual Studio vás upozorní, pokud Git zastavil sloučení kvůli konfliktům. V takovém případě můžete konflikty vyřešit nebo zrušit sloučení a vrátit se do stavu před sloučením. Oddíl Unmerged Changes (Unmerged Changes) v okně Změny Gitu obsahuje seznam souborů s konflikty při slučování. U souboru s konflikty při slučování v jeho obsahu poklikejte na soubor a otevřete ho v editoru sloučení.

    Snímek obrazovky se soubory s konflikty při slučování v okně Změny Gitu v sadě Visual Studio

  3. V editoru sloučení se v podokně Příchozí zobrazuje verze souboru zdrojové větve, aktuální podokno zobrazuje verzi souboru cílové větve a v podokně Výsledek se zobrazí výsledný slučovací soubor. Pokud chcete použít konkrétní změny zdroje nebo cílové větve, zaškrtněte políčko vedle konfliktních řádků, které chcete zachovat. V podokně Výsledek můžete také přímo upravit slučovací soubor. Po vyřešení všech konfliktů při slučování v aktuálním souboru zvolte Přijmout sloučení . Tento krok opakujte pro každý soubor s konflikty obsahu.

    Snímek obrazovky s editorem sloučení v sadě Visual Studio

  4. U souboru, který byl upraven v jedné větvi a odstraněn v druhé, klikněte pravým tlačítkem myši na soubor a vyberte požadovanou akci větve.

    Snímek obrazovky s místní nabídkou pro konfliktní soubor v okně Změny Gitu v sadě Visual Studio

  5. V okně Změny Gitu zadejte zprávu potvrzení a zvolte Commit Staged a dokončete sloučení – po vyřešení všech konfliktů při slučování pro všechny soubory.

    Snímek obrazovky se zprávou potvrzení a tlačítkem Commit Staged v okně Změny Gitu v sadě Visual Studio

Další kroky