Rozwiązywanie konfliktów scalania

Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019

Visual Studio 2019 | Visual Studio 2022

Podczas scalania lub ponownej bazy informujesz usługę Git o zintegrowaniu zmian wprowadzonych w jednej gałęzi ze zmianami wprowadzonych w innej gałęzi. Często usługa Git automatycznie wykonuje scalanie lub ponowne bazy danych bez twojej pomocy. Jeśli jednak usługa Git wykryje, że zmiana w jednej gałęzi powoduje konflikt ze zmianą wprowadzoną w innym, spowoduje to rozwiązanie konfliktu. Konflikt scalania może wystąpić, gdy scalone gałęzie edytują ten sam wiersz pliku inaczej lub gdy jedna gałąź modyfikuje plik, a inna gałąź je usuwa. Proces rozwiązywania konfliktów scalania ma zastosowanie zarówno do scalania git, jak i ponownego tworzenia bazy danych.

Konflikty scalania można rozwiązać w programie Visual Studio lub za pomocą wiersza polecenia i dowolnego edytora tekstów.

Aby zapoznać się z omówieniem przepływu pracy usługi Git, zobacz Samouczek usługi Azure Repos Git.

Ten artykuł zawiera procedury dla następujących zadań:

  • Omówienie konfliktów scalania
  • Rozwiązywanie konfliktów scalania

Omówienie konfliktów scalania

Scalanie lub ponowne bazy danych Git integruje zatwierdzenia z gałęzi źródłowej z bieżącą gałęzią lokalną (gałąź docelowa). Scalanie usługi Git wykonuje szybkielub szybkie scalanie. Scalanie bez szybkiego przesyłania dalej jest również znane jako scalanie trzykierunkowe lub scalanie true . Baza danych Git to inny typ scalania. Te typy scalania przedstawiono na poniższym diagramie.

Diagram przedstawiający zatwierdzenia przed i po zatwierdzeniu podczas korzystania z funkcji scalania Git i bazy danych Git.

W przypadku scalania git, jeśli porada gałęzi docelowej istnieje w gałęzi źródłowej, domyślnym typem scalania będzie szybkie scalanie. W przeciwnym razie domyślnym typem scalania będzie scalanie bez szybkiego przesyłania dalej.

Scalanie szybkie do przodu nigdy nie może mieć konfliktu scalania, ponieważ usługa Git nie zastosuje szybkiego scalania, jeśli porada gałęzi docelowej rozeszła się z gałęzi źródłowej. Domyślnie usługa Git używa szybkiego scalania zawsze, gdy jest to możliwe. Na przykład usługa Git zastosuje szybkie scalanie w gałęzi lokalnej, która zostanie zaktualizowana tylko przez ściągnięcie z zdalnej gałęzi odpowiednika.

Scalanie bez szybkiego przekazywania generuje nową gałąź docelową "zatwierdzenie scalania", która integruje zmiany gałęzi źródłowej ze zmianami gałęzi docelowej. Odpowiednie zmiany są wprowadzane po ostatnim zatwierdzeniu, które jest wspólne dla obu gałęzi. Na powyższym diagramie zatwierdzenie C jest ostatnim wspólnym zatwierdzeniem w obu gałęziach. Jeśli jakakolwiek zmiana gałęzi źródłowej powoduje konflikt z dowolną zmianą gałęzi docelowej, usługa Git wyświetli monit o rozwiązanie konfliktu scalania. Zatwierdzenie scalania (L) zawiera zmiany zintegrowanej gałęzi źródłowej i gałęzi docelowej. Porady dotyczące gałęzi źródłowej i docelowej (K i E) są elementami nadrzędnymi zatwierdzenia scalania. W historii zatwierdzń gałęzi zatwierdzenie scalania jest przydatnym znacznikiem operacji scalania i wyraźnie pokazuje, które gałęzie zostały scalone.

Usługa Git rebase ponownie sekwencjonuje historię zatwierdzeń gałęzi docelowej, tak aby zawierała wszystkie zatwierdzenia gałęzi źródłowej, a następnie wszystkie zatwierdzenia gałęzi docelowej od ostatniego wspólnego zatwierdzenia. Na powyższym diagramie zatwierdzenie C jest ostatnim wspólnym zatwierdzeniem w obu gałęziach. Innym sposobem wyświetlenia jest to, że rebase odtwarza zmiany w gałęzi docelowej na początku historii gałęzi źródłowej. Jeśli jakakolwiek zmiana gałęzi źródłowej powoduje konflikt z dowolną zmianą gałęzi docelowej, usługa Git wyświetli monit o rozwiązanie konfliktu scalania. Podobnie jak w przypadku szybkiego scalania, baza rebase nie tworzy zatwierdzenia scalania. W szczególności baza zmienia sekwencję istniejących zatwierdzeń gałęzi docelowej, co nie jest w przypadku innych strategii scalania. Na powyższym diagramie zatwierdzenie K zawiera te same zmiany co K, ale ma nowy identyfikator zatwierdzenia, ponieważ łączy się z powrotem z zatwierdzeniem E zamiast C.

Scalanie i ponowne bazy danych Git modyfikują tylko gałąź docelową — gałąź źródłowa pozostaje niezmieniona. W przypadku napotkania jednego lub większej liczby konfliktów scalania należy je rozwiązać, aby ukończyć scalanie lub bazę danych. Możesz też anulować operację scalania/bazy danych i zwrócić gałąź docelową do poprzedniego stanu.

Aby uzyskać więcej informacji na temat opcji scalania i strategii, zobacz podręcznik dokumentacji usługi Git i strategie scalania Git.

Kiedy należy rozwiązać konflikty scalania

Scalanie usługi Git i baza danych Git są szeroko używane w przepływie pracy usługi Git. Podczas pracy nad lokalną funkcją lub gałęzią poprawki usterek często zdarza się:

  1. Zachowaj bieżącą gałąź lokalną main ze swoim zdalnym odpowiednikiem, okresowo ściągając w celu pobrania i scalania zatwierdzeń zdalnych.
  2. Integrowanie aktualizacji gałęzi lokalnej main z lokalną gałęzią funkcji przy użyciu bazy danych lub scalania.
  3. Wykonaj kopię zapasową pracy w lokalnej gałęzi funkcji, wypychając ją do odpowiedniej gałęzi zdalnej.
  4. Po ukończeniu funkcji utwórz żądanie ściągnięcia, aby scalić zdalną gałąź funkcji z gałęzią zdalnąmain.

Często integrując zdalne zmiany w lokalnym repozytorium, możesz być świadomy ostatnich prac innych osób i szybko rozwiązać wszelkie pojawiające się konflikty scalania.

Rozwiązywanie konfliktów scalania

Proces rozwiązywania konfliktów scalania ma zastosowanie zarówno do scalania git, jak i bazy danych Git. Chociaż w poniższych krokach opisano sposób rozwiązywania konfliktów scalania podczas scalania, można podobnie rozwiązywać konflikty scalania podczas ponownej bazy danych.

Napiwek

Jeśli gałąź źródłowa jest gałęzią zdalnego śledzenia, upewnij się, że gałąź jest aktualna, uruchamiając pobieranie usługi Git przed scaleniem. Możesz też uruchomić polecenie ściągania usługi Git, które łączy pobieranie usługi Git z scalanym repozytorium Git.

Program Visual Studio 2022 zapewnia środowisko kontroli wersji usługi Git przy użyciu menu Git, zmian git i menu kontekstowych w Eksplorator rozwiązań. Program Visual Studio 2019 w wersji 16.8 oferuje również interfejs użytkownika narzędzia Team Explorer Git. Aby uzyskać więcej informacji, zobacz kartę Visual Studio 2019 — Team Explorer .

  1. W okienku Gałęzie w oknie Repozytorium Git wyewidencjonuj gałąź docelową. Następnie kliknij prawym przyciskiem myszy gałąź źródłową i wybierz polecenie Scal gałąź> źródłową z <gałęzią> docelową.<

    Zrzut ekranu przedstawiający opcję Scal w menu kontekstowym gałęzi w oknie Repozytorium Git programu Visual Studio.

  2. Program Visual Studio powiadomi Cię, jeśli narzędzie Git wstrzymało scalanie z powodu konfliktów. W takim przypadku można rozwiązać konflikty lub anulować scalanie i powrócić do stanu przed scalenia. Sekcja Niezagnieżdżone zmiany w oknie Zmiany usługi Git zawiera listę plików z konfliktami scalania. W przypadku pliku z konfliktami scalania w jego zawartości kliknij dwukrotnie plik, aby otworzyć go w edytorze scalania.

    Zrzut ekranu przedstawiający pliki z konfliktami scalania w oknie Zmiany usługi Git programu Visual Studio.

  3. W edytorze scalania okienko Przychodzące zawiera wersję pliku gałęzi źródłowej, w okienku Bieżący jest wyświetlana wersja pliku gałęzi docelowej, a w okienku Wynik zostanie wyświetlony wynikowy plik scalania. Aby zastosować określone zmiany gałęzi źródłowej lub docelowej, zaznacz pole wyboru obok wierszy powodujących konflikt, które chcesz zachować. Możesz również bezpośrednio edytować plik scalania w okienku Wynik . Wybierz pozycję Akceptuj scalanie po rozwiązaniu wszystkich konfliktów scalania w bieżącym pliku. Powtórz ten krok dla każdego pliku z konfliktami zawartości.

    Zrzut ekranu przedstawiający edytor scalania w programie Visual Studio.

  4. W przypadku pliku, który został edytowany w jednej gałęzi i usunięty w drugiej, kliknij prawym przyciskiem myszy plik i wybierz odpowiednią akcję gałęzi.

    Zrzut ekranu przedstawiający menu kontekstowe pliku powodującego konflikt w oknie Zmiany git programu Visual Studio.

  5. W oknie Zmiany usługi Git wprowadź komunikat zatwierdzenia i wybierz pozycję Zatwierdź przygotowane do ukończenia scalania — po rozwiązaniu wszystkich konfliktów scalania dla wszystkich plików.

    Zrzut ekranu przedstawiający komunikat zatwierdzenia i przycisk Commit Staged (Zatwierdzanie przygotowane) w oknie Git Changes (Zmiany usługi Git) programu Visual Studio.

Następne kroki