Egyesítési ütközések feloldása

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

Visual Studio 2019 | Visual Studio 2022

Egyesítéskor vagy újrabáziskor azt mondja a Gitnek, hogy integrálja az egyik ágon végrehajtott módosításokat a másikon végrehajtott módosításokkal. A Git gyakran az Ön segítsége nélkül automatikusan végrehajt egy egyesítést vagy újrabázist. Ha azonban a Git azt észleli, hogy az egyik ágon végrehajtott módosítás ütközik egy másikon végrehajtott módosítással, az arra kéri, hogy oldja fel az ütközést. Egyesítési ütközés akkor fordulhat elő, ha az egyesített ágak eltérően szerkesztik ugyanazt a fájlsort, vagy ha egy ág módosít egy fájlt, és egy másik ág törli azt. Az egyesítési ütközések feloldásának folyamata a Git-egyesítésre és az újrabázisra is alkalmazható.

Az egyesítési ütközéseket a Visual Studióban vagy a parancssor és bármely szövegszerkesztő használatával oldhatja fel.

A Git-munkafolyamat áttekintéséhez tekintse meg az Azure Repos Git oktatóanyagát.

Ez a cikk a következő feladatok eljárásait ismerteti:

  • Az egyesítési ütközések ismertetése
  • Egyesítési ütközések feloldása

Az egyesítési ütközések ismertetése

A Git egyesíti vagy újrabázisba integrálja a véglegesítéseket egy forráságból az aktuális helyi ágba (célágba). A Git-egyesítés gyors vagy nem gyors előrébb egyesítést hajt végre. A nem gyors előrébb egyesítést háromirányú egyesítésnek vagy igaz egyesítésnek is nevezik. A Git rebase egy másik egyesítési típus. Ezek az egyesítési típusok az alábbi ábrán láthatók.

Diagram a véglegesítések előtt és után a Git-egyesítés és a Git-újrabázis használatakor.

Git-egyesítés esetén, ha a célág csúcsa a forráságon belül található, az alapértelmezett egyesítési típus gyors előrébb egyesítés lesz. Ellenkező esetben az alapértelmezett egyesítési típus nem lesz gyors előrébb egyesítés.

A gyors előrébb egyesítés soha nem okozhat egyesítési ütközést, mert a Git nem alkalmaz gyors előrébbi egyesítést, ha a célág csúcsa eltér a forráságtól. A Git alapértelmezés szerint gyors előrébb egyesítést használ, amikor csak lehetséges. A Git például gyors egyesítést alkalmaz egy helyi ágra, amelyet csak a távoli megfelelő ágból való lekéréssel frissít.

A nem gyors előrébb egyesítés új célág "egyesítési véglegesítést" hoz létre, amely integrálja a forráság módosításait a célág módosításaival. A vonatkozó módosítások a két ágra jellemző utolsó véglegesítés után történtek. Az előző ábrán a C véglegesítés az utolsó közös véglegesítés mindkét ágban. Ha a forráság módosítása ütközik a célág módosításával, akkor a Git kérni fogja, hogy oldja fel az egyesítési ütközést. Az egyesítési véglegesítés (L) tartalmazza az integrált forráságat és a célág módosításait. A forrás- és célágtippek (K és E) a egyesítési véglegesítés szülei. Az ág véglegesítési előzményeiben az egyesítési véglegesítés hasznos jelölője az egyesítési műveletnek, és egyértelműen megmutatja, hogy mely ágak egyesültek.

A Git újralekérdezi a célág véglegesítési előzményeit, hogy az tartalmazza az összes forráság-véglegesítést, majd az összes célág véglegesítését az utolsó közös véglegesítés óta. Az előző ábrán a C véglegesítés az utolsó közös véglegesítés mindkét ágban. A megtekintés másik módja, hogy az újrabázis visszajátssza a célág módosításait a forráság előzményei fölé. Ha a forráság módosítása ütközik a célág módosításával, akkor a Git kérni fogja, hogy oldja fel az egyesítési ütközést. A gyorsított egyesítéshez hasonlóan az újrabázis sem hoz létre egyesítési véglegesítést. Az újrabázis módosítja a meglévő célág-véglegesítések sorrendjét, ami a többi egyesítési stratégia esetében nem így van. Az előző ábrán a K véglegesítés ugyanazokat a módosításokat tartalmazza, mint a K, de új véglegesítési azonosítóval rendelkezik, mivel a C helyett az E véglegesítéshez kapcsolódik.

A Git egyesítése és újrabázisa csak a célágat módosítja – a forráság változatlan marad. Ha egy vagy több egyesítési ütközést tapasztal, fel kell oldania őket az egyesítés vagy az újrabázis befejezéséhez. Vagy megszakíthatja az egyesítési/újrabázisi műveletet, és visszaállíthatja a célágat a korábbi állapotba.

Az egyesítési lehetőségekről és stratégiákról további információt a Git referencia-kézikönyvében és a Git egyesítési stratégiáiban talál.

Mikor kell feloldani az egyesítési ütközéseket?

A Git-egyesítés és a Git-újrabázis széles körben használatos a Git-munkafolyamatban. Helyi szolgáltatás vagy hibajavítás ág használata esetén a következő gyakori eljárás:

  1. A távoli véglegesítések beolvasásához és egyesítéséhez rendszeres időközönként lekérheti és egyesítheti a helyi main ágat a távoli megfelelőjével.
  2. Integrálhatja a helyi main ág frissítéseit a helyi szolgáltatáságba egy újrabázis vagy egyesítés használatával.
  3. A helyi szolgáltatáságon végzett munka biztonsági mentéséhez nyomja le a megfelelő távoli ágba.
  4. A szolgáltatás befejezésekor hozzon létre egy lekéréses kérelmet a távoli szolgáltatáság távoli main ágba való egyesítéséhez.

Ha gyakran integrálja a távoli módosításokat a helyi adattárba, tudhatja, hogy mások milyen munkát végeznek, és azonnal megoldhatja a felmerülő egyesítési ütközéseket.

Egyesítési ütközések feloldása

Az egyesítési ütközések feloldásának folyamata a Git-egyesítésre és a Git-rebase-re egyaránt alkalmazható. Bár az alábbi lépések bemutatják, hogyan oldhatók fel az egyesítési ütközések az egyesítés során, hasonló módon oldhatja fel az egyesítési ütközéseket egy újrabázis során.

Tipp.

Ha a forráság egy távoli követési ág, győződjön meg arról, hogy az ág naprakész, ha git-lekérést futtat az egyesítés előtt. Vagy futtassa a Git lekéréses parancsát, amely egy Git-lekérést kombinál egy Git-egyesítéssel.

A Visual Studio 2022 Git-verziókövetési felületet biztosít a Git menü, a Git-módosítások és a Megoldáskezelő helyi menüjének használatával. A Visual Studio 2019 16.8-es verziója a Team Explorer Git felhasználói felületét is kínálja. További információt a Visual Studio 2019 – Team Explorer lapon talál.

  1. A Git-adattár ablakÁnak Ágak paneljén jelölje ki a célágat. Ezután kattintson a jobb gombbal a forráságra, és válassza a Forráság> egyesítése <célágba <>lehetőséget.

    Képernyőkép az Egyesítés lehetőségről a Visual Studio Git-adattár ablakának ág helyi menüjében.

  2. A Visual Studio értesítést küld, ha a Git ütközések miatt leállította az egyesítést. Ebben az esetben feloldhatja az ütközéseket, vagy megszakíthatja az egyesítést, és visszatérhet az egyesítés előtti állapothoz. A Git Changes ablak Egyesített módosítások szakaszafelsorolja az egyesítési ütközéseket tartalmazó fájlokat. Ha egy fájl egyesítési ütközéseket tartalmaz a tartalmában, kattintson duplán a fájlra a egyesítésszerkesztőben való megnyitásához.

    Képernyőkép az egyesítési ütközésekkel rendelkező fájlokról a Visual Studio Git Changes ablakában.

  3. Az egyesítésszerkesztő Bejövő ablaktábla a forráság fájlverzióját, az Aktuális ablaktáblán a célágfájl verzióját, az Eredmény ablaktáblán pedig az eredményül kapott egyesítési fájlt jeleníti meg. Ha konkrét forrás- vagy célágmódosításokat szeretne alkalmazni, jelölje be a megtartani kívánt ütköző sor(ok) melletti jelölőnégyzetet. Az egyesítési fájlt közvetlenül is szerkesztheti az Eredmény panelen. Az aktuális fájl összes egyesítési ütközésének feloldása után válassza az Egyesítés elfogadása lehetőséget. Ismételje meg ezt a lépést minden tartalomütközéssel rendelkező fájl esetében.

    Képernyőkép a Visual Studióban található egyesítésszerkesztőről.

  4. Az egyik ágban szerkesztett és a másikban törölt fájl esetében kattintson a jobb gombbal a fájlra, és válassza ki a kívánt ágműveletet.

    Képernyőkép egy ütköző fájl helyi menüjéről a Visual Studio Git Changes ablakában.

  5. A Git-módosítások ablakban írjon be egy véglegesítési üzenetet, és válassza a Véglegesítés szakaszos elemet az egyesítés befejezéséhez – miután megoldotta az összes fájl összes egyesítési ütközését.

    Képernyőkép a Véglegesítés üzenetről és a Véglegesítés szakaszos gombról a Visual Studio Git Changes ablakában.

Következő lépések