Anwenden von Änderungen durch einen Rebase

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020 | 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 einem Zweig , 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. Beispielsweise kombiniert ein No-Fast-Forward-Zusammenführen unterschiedliche Entwicklungslinien, indem ein Merge-Commit mit mehreren Vorgängern erstellt wird. Umgekehrt kombiniert eine Git-Rebase divergente 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 des Zusammenführens beibehalten oder den Commitverlauf vereinfachen möchten.

In diesem Artikel wird erläutert, wann eine Rebase anstelle einer no-fast-Forward-Zusammenführung verwendet werden soll, und stellt Verfahren für die folgenden Aufgaben bereit:

  • Rebasen Ihrer lokalen Verzweigung
  • Erzwingen des Lokalen Zweigs nach einer Rebase
  • Interaktive Rebase für lokale Commits

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

Rebasen Ihrer lokalen Verzweigung

Git rebase integriert Commits aus einem Quellzweig in Ihren aktuellen lokalen Zweig (Zielzweig). Der Quellzweig bleibt unverändert. Im Vergleich werden Git-Rebase- und andere Zusammenführungstypen im folgenden Diagramm angezeigt.

Diagramm mit dem Vor- und Nach-Commit beim Verwenden von Git-Rebase.

Git rebaset den Commitverlauf des Zielzweigs erneut, sodass es alle Quellzweig-Commits enthält, gefolgt von allen Zielzweig-Commits seit dem letzten gemeinsamen Commit. Eine weitere Möglichkeit zum Anzeigen ist, dass eine Neubasis die Änderungen in Ihrem Zielzweig oben im Quellzweigverlauf erneut anzeigt. Insbesondere ändert Git rebase die Sequenz der vorhandenen Zielzweig-Branch-Commits, was nicht der Fall für die anderen Zusammenführungsstrategien 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 statt C verknüpft.

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

Rebase vs. no-fast-forward merge

Git rebase führt zu einem einfacheren, aber weniger genauen Commitverlauf als ein no-fast-forward Merge, andernfalls als dreiwegige oder true Merge bezeichnet. Wenn Sie einen Datensatz eines Zusammenführens im Commitverlauf verwenden möchten, verwenden Sie einen no-fast-forward Merge.

Wenn Sie die einzige Person sind, die an einem Feature- oder Bugfix-Zweig arbeitet, sollten Sie eine Rebase verwenden, um zuletzt verwendete main Zweigarbeiten regelmäßig zu integrieren. Diese Strategie hilft, sicherzustellen, dass Sie sich der aktuellen Arbeit von anderen bewusst bleiben und alle Zusammenführungskonflikte beheben, die entstehen. Durch erneutes Speichern implementieren Sie Ihr neues Feature auf dem neuesten main Zweigwerk, das einen linearen Commitverlauf beibehalten kann.

Weitere Informationen zur Git-Rebase und zum Verwenden finden Sie unter "Rebase vs Merge".

Rebase- und Force-Push-Richtlinien

Wenn Sie eine lokale Verzweigung nachstellen, die Sie zuvor pusht haben, und führen Sie dann erneut den Standard-Git-Pushbefehl aus, schlägt das Push fehl. Der Standard-Git-Pushbefehl wendet einen schnell weiterleitenden Zusammenführen an, um Ihre lokale Zweigstelle in den Remotezweig zu integrieren. Dieser Befehl schlägt nach einer Neubasis fehl, da die Rebase die Sequenz vorhandener Commits in Ihrem lokalen Zielzweig ändert, sodass es nicht mehr mit dem Verlauf des Remote-Gegenstücks übereinstimmt. In diesem Szenario wird ein Kraft-Push erfolgreich sein, indem sie den Remotezweig überschreiben.

Git rebase and force push sind leistungsstarke Tools, aber beachten Sie diese Richtlinien bei der Entscheidung, ob sie verwendet werden sollen:

  • Erstellen Sie keine Basis für eine lokale Verzweigung, die für andere Freigegeben wurde, es sei denn, Sie sind sicher, dass sie nicht den freigegebenen Zweig verwenden. Nach einer Neubasis entspricht Ihr lokaler Zweig nicht mehr dem Verlauf des Remote-Gegenstücks.
  • Erzwingen Sie keinen Push an einen Remotezweig, der von anderen verwendet wird, da ihre lokale Version des Remotezweigs nicht mehr dem aktualisierten Remotezweigverlauf entspricht.
  • Ihr Team sollte sich auf die Nutzungsszenarien für die Rebase- und Force-Push festlegen.

Tipp

Verwenden Sie für einen Zusammenarbeitsüberprüfungsprozess eine Pullanforderung , um neue Arbeit in den Standardzweig eines Remote-Repo zusammenzuführen.

So wird's machen

Visual Studio 2019 Version 16.8 und höher bietet eine Git-Versionssteuerungserfahrung, während die Team Explorer Git-Benutzeroberfläche beibehalten wird. Um Team-Explorer zu verwenden, deaktivieren Sie die Option Extras>Optionen>Vorschau Features>Neue Git-Benutzeroberfläche aus der Menüleiste. Sie können Git-Features von beiden Schnittstellen austauschbar verwenden. Nachfolgend stellen wir einen querseitigen Vergleich zur Ausführung einer Git-Rebase 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-Repositoryfenster 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 "Zielzweig rebase<" auf <Quellzweig>> aus.

Screenshot der Option

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

Screenshot der Bestätigungsmeldung im Git-Repositoryfenster von Visual Studio 2019.

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

Screenshot der Neubasiskonfliktnachricht 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 "Zweigen " 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 "Auf" aus.

Screenshot der Option

  1. Überprüfen Sie die Rebase-Optionen, und klicken Sie dann auf "Rebase".

Screenshot der Neubasisdetails in der Zweigansicht des Team Explorers in Visual Studio 2019.

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

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

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

Screenshot der Neubasiskonfliktnachricht in der Ansicht

Erzwingen des Lokalen Zweigs nach einer Rebase

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

Warnung

Erzwingen Sie nie einen Zweig, an dem andere arbeiten. Weitere Informationen finden Sie unter Rebase und Erzwingen von Pushrichtlinien.

Visual Studio 2019 Version 16.8 und höher bietet eine Git-Versionssteuerungserfahrung, während die Team Explorer Git-Benutzeroberfläche beibehalten wird. Um Team-Explorer zu verwenden, deaktivieren Sie die Option Extras>Optionen>Vorschau Features>Neue Git-Benutzeroberfläche aus der 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