Stosowanie zmian za pomocą zmieniania bazy
Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019
Visual Studio 2019 | Visual Studio 2022
Usługa Git automatycznie utrzymuje historię programowania w gałęzi , łącząc każde nowe zatwierdzenie z jego poprzednikiem. Po scaleniu jednej gałęzi z inną historia może stać się mniej prosta. Na przykład scalanie bez szybkiego przekazywania łączy rozbieżne linie programowania, tworząc zatwierdzenie scalania z wieloma poprzednikami. Z drugiej strony baza danych Git łączy rozbieżne linie programowania bez tworzenia zatwierdzenia scalania, co powoduje prostszą historię zatwierdzeń, ale traci informacje o scalaniu. Wybór typu scalania może mieć wpływ na to, czy chcesz zachować rekord scalania, czy uprościć historię zatwierdzania.
W tym artykule omówiono, kiedy używać bazy rebase zamiast scalania bez szybkiego przekazywania, i przedstawiono procedury dla następujących zadań:
- Zmień bazę gałęzi lokalnej
- Wymusić wypchnięcie gałęzi lokalnej po rebase
- Interakcyjna ponowna baza danych do zatwierdzeń lokalnych zmiecenia lokalnego
Aby zapoznać się z omówieniem przepływu pracy usługi Git, zobacz Samouczek usługi Azure Repos Git.
Zmień bazę gałęzi lokalnej
Baza danych Git integruje zatwierdzenia z gałęzi źródłowej z bieżącą gałęzią lokalną (gałąź docelowa). Gałąź źródłowa pozostaje niezmieniona. Dla porównania baza danych Git i inne typy scalania są pokazane na poniższym diagramie.
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. Innym sposobem wyświetlenia jest to, że rebase odtwarza zmiany w gałęzi docelowej na początku historii gałęzi źródłowej. W szczególności baza danych Git 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.
Podczas ponownej bazy, jeśli zmiana gałęzi źródłowej powoduje konflikt ze zmianą gałęzi docelowej, usługa Git wyświetli monit o rozwiązanie konfliktu scalania. Konflikty scalania można rozwiązać podczas ponownej bazy w taki sam sposób, jak rozwiązywanie konfliktów scalania podczas scalania.
Ponowne bazy danych a nie szybkie scalanie
Ponowne tworzenie repozytorium Git powoduje prostszą, ale mniej dokładną historię zatwierdzeń niż scalanie bez szybkiego przesyłania dalej , inaczej znane jako trzykierunkowe lub prawdziwe scalanie. Jeśli chcesz zarejestrować rekord scalania w historii zatwierdzeń, użyj scalania bez szybkiego przekazywania.
Jeśli jesteś jedyną osobą pracującą nad funkcją lub gałęzią poprawki usterek, rozważ użycie bazy danych w celu okresowego zintegrowania z nią ostatniej main
gałęzi. Ta strategia pomaga zapewnić, że będziesz mieć świadomość ostatnich prac innych osób i szybko rozwiąż wszelkie pojawiające się konflikty scalania. Po ponownym utworzeniu nowej funkcji należy zaimplementować najnowszą main
pracę gałęzi, która pomaga zachować liniową historię zatwierdzeń.
Aby uzyskać więcej informacji na temat bazy danych Git i czasu jej używania, zobacz Rebase vs merge.
Rebase and force-push guidelines (Ponowne bazy danych i wymuszania wypychania)
Jeśli bazujesz ponownie gałąź lokalną, która została wcześniej wypchnięta, a następnie ponownie uruchom domyślne polecenie wypychania Git, wypychanie zakończy się niepowodzeniem. Domyślne polecenie wypychania Git stosuje scalanie szybkie do przodu, aby zintegrować gałąź lokalną z gałęzią zdalną. To polecenie zakończy się niepowodzeniem po rebase, ponieważ baza rebase zmienia sekwencję istniejących zatwierdzeń w lokalnej gałęzi docelowej, więc nie jest już zgodna z historią swojego odpowiednika zdalnego. W tym scenariuszu wymuszone wypchnięcie powiedzie się — zastępując gałąź zdalną.
Baza danych Git i wymuszanie wypychania są zaawansowanymi narzędziami, ale pamiętaj o tych wytycznych podczas podejmowania decyzji, czy ich używać:
- Nie bazuj na lokalnej gałęzi, która została wypchnięta i udostępniona innym osobom, chyba że masz pewność, że nikt nie korzysta z udostępnionej gałęzi. Po zmianie bazy gałąź lokalna nie będzie już zgodna z historią swojego odpowiednika zdalnego.
- Nie wymuszaj wypychania do zdalnej gałęzi, która jest używana przez inne osoby, ponieważ ich lokalna wersja gałęzi zdalnej nie będzie już zgodna ze zaktualizowaną historią gałęzi zdalnej.
- Twój zespół powinien uzgodnić scenariusze użycia dla ponownej bazy danych i wymuszenia wypychania.
Napiwek
W przypadku wspólnego procesu przeglądu użyj żądania ściągnięcia, aby scalić nową pracę z domyślną gałęzią repozytorium zdalnego.
Jak przebazować bazę danych
- Visual Studio 2022
- Visual Studio 2019 — menu Git
- Visual Studio 2019 — Team Explorer
- Wiersz polecenia usługi 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 .
Wybierz pozycję Git Manage Branches (Zarządzanie gałęziami usługi Git>), aby otworzyć okno Repozytorium Git.
W oknie Repozytorium Git kliknij prawym przyciskiem myszy gałąź docelową i wybierz polecenie Wyewidencjonuj.
Kliknij prawym przyciskiem myszy gałąź źródłową i wybierz polecenie Zmień bazę <docelową-gałąź na <gałąź>> źródłową.
Program Visual Studio wyświetli komunikat potwierdzający po pomyślnym ponownym zdaniu bazy danych.
Jeśli baza bazy danych zostanie zatrzymana z powodu konfliktów scalania, program Visual Studio powiadomi Cię. Możesz rozwiązać konflikty lub anulować rebase i powrócić do stanu bazy wstępnej.
Wymusić wypchnięcie gałęzi lokalnej po rebase
Jeśli bazujesz ponownie gałąź lokalną, która została wcześniej wypchnięta, kolejne domyślne wypychanie git zakończy się niepowodzeniem. Zamiast tego możesz wymusić wypchnięcie gałęzi lokalnej, aby zastąpić jego zdalny odpowiednik, aby ich historie zatwierdzeń odpowiadały.
Ostrzeżenie
Nigdy nie wymuszaj wypychania gałęzi, nad którą pracują inni. Aby uzyskać więcej informacji, zobacz Rebase and force push guidelines (Ponowne bazy danych i wymuszanie wypychania).
Aby wymusić wypchnięcie w programie Visual Studio, musisz najpierw włączyć opcję wymuszania wypychania:
Przejdź do pozycji Narzędzia>Opcje>Kontroli>źródła Globalne Ustawienia Git.
Wybierz opcję Włącz wypychanie --force-with-lease.
Flaga wypychania --force-with-lease
Usługi Git jest bezpieczniejsza niż --force
flaga, ponieważ nie zastąpi gałęzi zdalnej, która zawiera zatwierdzenia, które nie są zintegrowane w gałęzi lokalnej, którą wymusisz wypychanie.
- Visual Studio 2022
- Visual Studio 2019 — menu Git
- Visual Studio 2019 — Team Explorer
- Wiersz polecenia usługi Git
W oknie Git Changes (Zmiany usługi Git) wybierz przycisk push , aby wypchnąć zatwierdzenie.
Możesz też wybrać pozycję Wypchnij z menu Git .
Jeśli domyślna operacja wypychania Git zakończy się niepowodzeniem, program Visual Studio uruchomi okno dialogowe Git-Push nie powiodło się . Wybierz pozycję Wymuś wypchnięcie.
Program Visual Studio wyświetli komunikat potwierdzający po pomyślnym wypchnięciu.
Interakcyjna ponowna baza danych do zatwierdzeń lokalnych zmiecenia lokalnego
Zazwyczaj podczas pracy nad nową funkcją w lokalnej gałęzi funkcji utworzysz wiele zatwierdzeń. Gdy wszystko będzie gotowe do opublikowania nowej funkcji, możesz skonsolidować te zatwierdzenia w jednym zatwierdzeniu, aby uprościć historię zatwierdzeń. Możesz użyć interakcyjnej bazy danych, aby zmiażdżyć wiele zatwierdzeń w jednym zatwierdzeniu.
- Visual Studio 2022
- Visual Studio 2019 — menu Git
- Visual Studio 2019 — Team Explorer
- Wiersz polecenia usługi Git
Program Visual Studio 2022 nie obsługuje interaktywnego ponownego łączenia. Zamiast tego użyj wiersza polecenia usługi Git.
Uwaga
Użytkownicy usługi Azure DevOps mogą scalać dane , aby skondensować historię zatwierdzeń gałęzi tematu podczas żądania ściągnięcia.