Anwenden von Änderungen durch einen Rebase

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019 | TFS 2018

Visual Studio 2022 | Visual Studio 2019-| Visual Studio 2017 | Visual Studio 2015

Git verwaltet automatisch einen Verlauf der Entwicklung auf einer Verzweigung , indem jeder neue Commit mit seinem Vorgänger verknüpft wird. Wenn Sie eine Verzweigung in eine andere zusammenführen , kann der Verlauf weniger einfach werden. So kombiniert z. B. eine Zusammenführung ohne Schnelllauf unterschiedliche Entwicklungslinien, indem ein Merge-Commit mit mehreren Vorgängern erstellt wird. Umgekehrt kombiniert eine Git-Rebase unterschiedliche Entwicklungslinien, ohne einen Merge-Commit zu erstellen, was zu einem einfacheren Commitverlauf führt, aber Informationen zum Zusammenführen verliert. Die Auswahl des Seriendrucktyps wird wahrscheinlich davon beeinflusst, ob Sie einen Datensatz der Zusammenführung beibehalten oder den Commitverlauf vereinfachen möchten.

In diesem Artikel wird erläutert, wann eine Neubasis anstelle eines Seriendrucks ohne Schnelleinführung verwendet werden soll, und es werden Verfahren für die folgenden Aufgaben bereitgestellt:

  • Neubasisieren Ihrer lokalen Verzweigung
  • Erzwingen des Pushs ihrer lokalen Verzweigung nach einer Rebase
  • Interaktive Basis für lokale Commits

Eine Übersicht über den Git-Workflow finden Sie unter Azure Repos Git-Lernprogramm.

Neubasisieren Ihrer lokalen Verzweigung

Git rebase integriert Commits aus einer Quellverzweigung in Ihre aktuelle lokale Verzweigung (Zielzweig). Der Quellzweig bleibt unverändert. Im folgenden Diagramm werden git rebase und andere Zusammenführungstypen angezeigt.

Diagramm mit den Vor- und Nach-Commits bei der Verwendung von Git-Neubasis.

Git rebase resequences the commit history of the target branch so that it contains all source branch commits, gefolgt von allen Target Branch Commits seit dem letzten gemeinsamen Commit. Eine weitere Möglichkeit zum Anzeigen ist, dass eine Rebase die Änderungen in Ihrer Zielverzweigung oben im Quellzweigverlauf wiedergibt. Insbesondere ändert Git rebase die Sequenz der vorhandenen Zielverzweigungs-Commits, was nicht für die anderen Zusammenführungsstrategien der Fall ist. Im vorherigen Diagramm enthält commit K' die gleichen Änderungen wie K, hat jedoch eine neue Commit-ID, da er zurück zum Commit E anstelle von C verknüpft.

Wenn eine Quellzweigänderung bei einer Zielzweigänderung in Konflikt steht, fordert Git Sie auf, den Zusammenführungskonflikt zu beheben. Sie können Zusammenführungskonflikte während einer Neubasis auf die gleiche Weise beheben, wie Sie Zusammenführungskonflikte während einer Zusammenführung auflösen.

Rebase vs. no-fast-forward merge

Git-Neubasis führt zu einem einfacheren, aber weniger genauen Commitverlauf als einem Seriendruck ohne SchnelleInführung , andernfalls als dreidirektionale oder wahrer Zusammenführung bekannt. Wenn Sie einen Datensatz eines Zusammenführungsvorgangs im Commitverlauf erstellen möchten, verwenden Sie einen Seriendruck ohne Schnellweiterleitung.

Wenn Sie die einzige Person sind, die an einer Funktion oder einem Bugfix-Zweig arbeitet, sollten Sie eine Neubasis verwenden, um zuletzt verwendete main Verzweigungsarbeiten regelmäßig in diese zu integrieren. Diese Strategie hilft sicherzustellen, dass Sie sich der letzten Arbeit von anderen bewusst bleiben und alle Zusammenführungskonflikte beheben, die auftreten. Durch die Neubasierung implementieren Sie Ihr neues Feature oben in der neuesten main Verzweigungsarbeit, wodurch ein linearer Commitverlauf beibehalten wird.

Weitere Informationen zur Git-Neubasis und zur Verwendung finden Sie unter Rebase vs Merge.

Richtlinien für Neubasis und Force-Push

Wenn Sie eine lokale Verzweigung neu erstellen, die Sie zuvor pusht haben, und führen Sie dann den standardmäßigen Git-Pushbefehl erneut aus, schlägt der Push fehl. Der Standardmäßige Git-Pushbefehl wendet einen schnellen Zusammenführungsdruck an, um Ihre lokale Verzweigung in die Remotezweige zu integrieren. Dieser Befehl schlägt nach einer Neubasis fehl, da die Rebase die Sequenz vorhandener Commits in Ihrer lokalen Zielverzweigung ändert, sodass er nicht mehr mit dem Verlauf des Remote-Gegenstücks übereinstimmt. In diesem Szenario wird ein Force-Push erfolgreich sein– indem die Remotezweige überschrieben werden.

Git-Rebase und Force-Push sind leistungsstarke Tools, beachten Sie jedoch die folgenden Richtlinien, wenn Sie entscheiden, ob sie verwendet werden sollen:

  • Erstellen Sie keine Basis für eine lokale Verzweigung, die für andere Personen pusht und freigegeben wurde, es sei denn, Sie sind sicher, dass niemand die freigegebene Verzweigung verwendet. Nach einer Neubasis entspricht Ihre lokale Verzweigung nicht mehr dem Verlauf des Remote-Gegenstücks.
  • Erzwingen Sie keinen Push an eine Remoteverzweigung, die von anderen Benutzern verwendet wird, da ihre lokale Version der Remoteverzweigung nicht mehr mit dem aktualisierten Remotezweigverlauf übereinstimmt.
  • Ihr Team sollte sich über die Nutzungsszenarien für die Neubasis und die Erzwingung des Pushs einigen.

Tipp

Verwenden Sie für einen Zusammenarbeitsprüfungsprozess eine Pullanforderung , um neue Arbeit in die Standardverzweigung eines Remoterepo zu verbinden.

So wird's gemacht: Neubasen

Visual Studio 2019, Version 16.8 und höher, bietet eine Git-Versionssteuerung, während die Git-Benutzeroberfläche des Team Explorers beibehalten wird. Um Team-Explorer zu verwenden, deaktivieren Sie die Option Extras>Optionen>Vorschau Features>Neue Git-Benutzeroberfläche über die Menüleiste. Sie können Git-Features von beiden Schnittstellen austauschbar verwenden. Nachfolgend stellen wir einen parallelen Vergleich zur Durchführung einer Git-Neubasis bereit.

Visual Studio Git

  1. Wählen Sie Git > Manage Branches aus, um das Git-Repositoryfenster zu öffnen.

Screenshot der Option

  1. Klicken Sie im Git-Repository-Fenster mit der rechten Maustaste auf den Zielzweig, und wählen Sie "Auschecken" aus.

Screenshot der Option

  1. Klicken Sie mit der rechten Maustaste auf den Quellzweig, und wählen Sie "Zielverzweigung neu<" auf <"Quellverzweigung>>" aus.

Screenshot der Option

  1. Visual Studio zeigt nach einer erfolgreichen Neubasis eine Bestätigungsmeldung an.

Screenshot der Bestätigungsmeldung für die Neubasis im Git-Repositoryfenster von Visual Studio 2019.

Wenn die Neubasis aufgrund von Zusammenführungskonflikten angehalten wird, benachrichtigt Visual Studio Sie. Sie können die Konflikte entweder auflösen oder die Neubasis abbrechen und zum Vor-Neu-Basiszustand zurückkehren.

Screenshot der Neubasiskonfliktmeldung im Git-Repositoryfenster von Visual Studio 2019.

Visual Studio Team Explorer

  1. Wählen Sie im Team-Explorer " Start" aus, und wählen Sie "Verzweigungen" aus.

Screenshot der Option

  1. Klicken Sie in der Ansicht "Verzweigungen " mit der rechten Maustaste auf den Zielzweig, und wählen Sie " Auschecken" aus.

Screenshot der Option

  1. Klicken Sie mit der rechten Maustaste auf den Quellzweig, und wählen Sie "Neu auf" aus.

Screenshot der Option

  1. Überprüfen Sie die Neubasisoptionen, und klicken Sie dann auf "Neubasis".

Screenshot der Neubasisdetails in der Ansicht

  1. Visual Studio zeigt nach einer erfolgreichen Neubasis eine Bestätigungsmeldung an.

Screenshot der Bestätigungsmeldung in der Verzweigungsansicht des Team-Explorers in Visual Studio 2019.

Wenn während der Rebase Konflikte auftreten, benachrichtigt Visual Studio Sie. Sie können die Konflikte entweder auflösen oder die Neubasis abbrechen und zum Vor-Neu-Basiszustand zurückkehren.

Screenshot der Neubasiskonfliktmeldung in der Ansicht

Erzwingen des Pushs ihrer lokalen Verzweigung nach einer Rebase

Wenn Sie eine lokale Verzweigung neu erstellen, die Sie zuvor pusht haben, schlägt ein nachfolgender Git-Standard-Push fehl. Stattdessen können Sie die lokale Verzweigung erzwingen, um das Remote-Gegenstück zu überschreiben, damit ihre Commithistorien übereinstimmen.

Warnung

Erzwingen Sie niemals einen Zweig, an dem andere personen arbeiten. Weitere Informationen finden Sie unter "Neubasis" und "Erzwingen von Pushrichtlinien".

Visual Studio 2019, Version 16.8 und höher, bietet eine Git-Versionssteuerung, während die Git-Benutzeroberfläche des Team Explorers beibehalten wird. Um Team-Explorer zu verwenden, deaktivieren Sie die Option Extras>Optionen>Vorschau Features>Neue Git-Benutzeroberfläche über die Menüleiste. Sie können Git-Features von beiden Schnittstellen austauschbar verwenden. Unten stellen wir einen parallelen Vergleich zur Erzwingung eines lokalen Zweigs bereit.

Tipp

Um das Push in Visual Studio zu erzwingen, müssen Sie zuerst die Force-Pushoption aktivieren:

  1. Wechseln Sie im Git-Menü zu "Tools>Options>Source Control>Git Global Settings".
  2. Legen Sie die Option "Push-force-with-lease" auf "Aktivieren" fest True.

Das Git-Pushkennzeichen --force-with-lease ist sicherer als das --force Flag, da er keine Remoteverzweigung überschreibt, die Commits enthält, die nicht in die lokale Verzweigung integriert sind, die Sie erzwingen.

Visual Studio Git

  1. Wählen Sie im Fenster "Git-Änderungen " die Pushschaltfläche aus, um Ihren Commit zu drücken.

Screenshot der Schaltfläche

Alternativ können Sie " Push" aus dem Git-Menü auswählen.

Screenshot der Option

  1. Wenn der standardmäßige Git-Pushvorgang fehlschlägt, startet Visual Studio das Dialogfeld "Git-Push fehlgeschlagen" . Wählen Sie "Push erzwingen" aus.

Screenshot des Dialogfelds

  1. Visual Studio zeigt nach einem erfolgreichen Push eine Bestätigungsmeldung an.

Screenshot der Pushbestätigungsnachricht in Visual Studio 2019.

Visual Studio Team Explorer

  1. Wählen Sie im Team-Explorer " Start " aus, und wählen Sie dann "Synchronisieren" aus, um die Synchronisierungsansicht zu öffnen.

Screenshot der Option

  1. Wählen Sie in der Synchronisierungsansicht"Push" aus, um Ihre Änderungen in das Remote-Repository hochzuladen.

Screenshot des Pushlinks in der Synchronisierungsansicht des Team-Explorers in Visual Studio 2019.

  1. Wenn der standardmäßige Git-Pushvorgang fehlschlägt, startet Visual Studio das Dialogfeld "Git-Push fehlgeschlagen" . Wählen Sie "Push erzwingen" aus.

Screenshot des Dialogfelds

  1. Visual Studio zeigt nach einem erfolgreichen Push eine Bestätigungsmeldung an.

Screenshot der Pushbestätigungsmeldung im Team Explorer in Visual Studio 2019.

Interaktive Basis für lokale Commits

Während Sie normalerweise an einem neuen Feature in Ihrer lokalen Featurezweige arbeiten, erstellen Sie mehrere Commits. Wenn Sie bereit sind, das neue Feature zu veröffentlichen, sollten Sie diese Commits in einem einzigen Commit konsolidieren, um den Commitverlauf zu vereinfachen. Sie können eine interaktive Neubasis verwenden, um mehrere Commits in einem einzelnen Commit zu zerteilen .

Visual Studio 2019 unterstützt keine interaktive Neubasierung. Verwenden Sie stattdessen die Git-Befehlszeile.

Hinweis

Azure DevOps-Benutzer können zusammenführen , um den Commitverlauf eines Themenzweigs während einer Pullanforderung zu verdichten.

Nächste Schritte