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

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022

Visual Studio 2019 | Visual Studio 2022

Návod

Můžete využít AI k pomoci s úkoly Azure DevOps. Informace o tom, jak začít, najdete v tématu Pomoc pro AI s Azure DevOps MCP Serverem.

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 sloučení je použitelný jak pro Git sloučení, tak pro Git přebaseování.

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.

Požadavky

Kategorie Požadavky
Přístup k projektu Člen projektu.
Povolení - Zobrazit kód v soukromých projektech: Alespoň základní přístup.
- Klonovat nebo přispívat do kódu v soukromých projektech: Člen skupiny Contributors nebo odpovídající oprávnění v projektu.
– Nastavení oprávnění k větvi nebo úložišti: Správa oprávnění jsou oprávnění pro větev nebo úložiště.
– Změnit výchozí větev: Oprávnění k úpravám jsou určená pro repozitář.
– Import úložiště: Člen skupiny zabezpečení Správci projektu nebo Oprávnění k vytvoření úložiště na úrovni projektu Git je nastaveno na Povolit. Další informace najdete v tématu Nastavení oprávnění úložiště Git.
Services Úložiště povolena.
Tools Optional. Použití az repos příkazů: Azure DevOps CLI.

Poznámka:

Ve veřejných projektech mají uživatelé s přístupem účastníků úplný přístup k Azure Repos, včetně zobrazení, klonování a přispívání ke kódu.

Kategorie Požadavky
Přístup k projektu Člen projektu.
Povolení - Zobrazit kód: Alespoň základní přístup.
- Klonujte nebo přispívejte do kódu: Člen skupiny zabezpečení Přispěvatelé nebo odpovídající oprávnění v projektu.
Services Úložiště povolena.

Porozumění konfliktům při slučování

Git merge nebo rebase integruje commity ze zdrojové větve do vaší aktuální místní větve (cílová větev). Git merge provádí buď fast-forward, nebo no-fast-forward sloučení. Sloučení bez rychlého pokračová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í commity před a po použití Git merge a Git rebase.

Pokud příkaz sloučení v Gitu zjistí, že hlavička cílové větve je obsažena ve zdrojové větvi, výchozím typem sloučení bude rychlé sloučení. V opačném případě bude výchozím typem sloučení sloučení bez rychlého sloučení.

Rychlé dopředné sloučení nikdy nemůže mít konflikt při slučování, protože Git nepoužije rychlé dopředné sloučení, pokud se špička cílové větve odchýlila 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 rychlý posun vpřed na místní větev, kterou aktualizujete pouze stahováním z její vzdálené protějškové větve.

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 commitu, který obě větve sdílejí. 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. Konce zdrojové a cílové větve (K a E) jsou rodiče 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 rebase upraví pořadí historie commitů cílové větve tak, aby seřadilo všechny commity z větve zdrojové, následované commitmi cílové větve od posledního společného commitu. 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 to vnímat, je, že rebase přepisuje změny v cílové větvi přes historii 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í, rebase nevytváří 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í. Potvrzení K' v předchozím diagramu obsahuje stejné změny jako K, ale má nové ID commit, protože odkazuje zpět na commit E místo 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 převést změny. 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í

Git merge a Git rebase se ve velkém rozsahu používají v Git workflow. 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ě pullujete a sloučíte vzdálené commity.
  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í funkční větvi tak, že ji přesunete do odpovídající vzdálené větve.
  4. Po dokončení funkcionality vytvořte pull request, abyste sloučili svou vzdálenou větev funkcí do hlavní 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í je použitelný jak pro Git merge, tak pro Git rebase. I když následující kroky popisují, jak vyřešit konflikty při slučování, můžete podobně vyřešit konflikty i při rebasování.

Návod

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 příkazu Git fetch 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 prostřednictvím kontextových nabídek v Průzkumníku ř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. Sekce Unmerged Changes v okně Změny Gitu obsahuje seznam souborů s konflikty 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 prostředí 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í ve 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 v Gitu ve vývojovém prostředí 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