Mergestrategien und Squashmerge

Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018

Wenn Sie eine Pullanforderung abschließen, führen Sie die Themenzweige in Ihre Standardzweige ein, normalerweise main. Diese Zusammenführung fügt den Commits des Themenzweigs zu Ihrem Hauptzweig hinzu und erstellt einen Merge-Commit, um konflikte zwischen dem Standard- und Themenzweig zu synchronisieren. Die Kommentare und Diskussionen in der Pull-Anforderung geben zusätzlichen Kontext für die änderungen, die in der Themenzweige vorgenommen wurden.

Example of a regular merge from a pull request.

Der Commitverlauf für Ihre main Verzweigung (oder andere Standardzweige) folgt nicht einer geraden Zeile, da der zugehörige Themenzweigverlauf besteht. Da ein Projekt größer wird, erhöht sich die Anzahl von Themenzweigen, die gleichzeitig bearbeitet wurden, wodurch der Standardzweigverlauf zunehmend schwieriger zu folgen ist.

Der Standardzweig ist eine genaue Darstellung des Verlaufs der einzelnen Themenzweige, aber es ist schwer zu verwenden, um umfassendere Fragen zur Entwicklung Ihres Projekts zu beantworten.

Squash-Zusammenführung

Das Zusammenführen von Squash ist eine Zusammenführungsoption, mit der Sie den Git-Verlauf von Themenzweigen zusammenführen können, wenn Sie eine Pullanforderung abschließen. Anstatt jedes Commit für den Themenzweig dem Verlauf des Standardzweigs hinzuzufügen, fügt ein Squashdruck alle Dateiänderungen zu einem einzelnen neuen Commit auf dem Standardzweig hinzu.

Diagram of squash merging in pull requests in Azure Repos.

Eine einfache Möglichkeit, dies zu berücksichtigen, ist, dass der Squashdruck Nur die Dateiänderungen bietet, und eine reguläre Zusammenführung bietet Ihnen die Dateiänderungen und den Commitverlauf.

Wie ist eine Squashzusammenführung hilfreich?

Das Zusammenführen von Squash hält Ihre Standardzweighistorien sauber und einfach zu befolgen, ohne workflowänderungen in Ihrem Team zu verlangen. Mitwirkende an der Themenzweige funktionieren, wie sie in der Themenzweige möchten, und die Standardzweige behalten einen linearen Verlauf über die Verwendung von Squashzusammenführungen. Der Commitverlauf eines main verzweigten Zweigs, der mit Squashdruck aktualisiert wird, weist einen Commit für jede zusammengeführte Verzweigung auf. Sie können diesen Verlauf durchlaufen, um genau zu erfahren, wann die Arbeit abgeschlossen wurde.

Überlegungen beim Zusammenführen von Squash

Das Zusammenführen von Squash verdichtet die Geschichte der Änderungen in Ihrem Standardzweig, sodass es wichtig ist, mit Ihrem Team zu arbeiten, um zu entscheiden, wann Sie den Zusammenführen oder wenn Sie den vollständigen Commitverlauf eines Themenzweigs beibehalten möchten. Beim Zusammenführen von Squash empfiehlt es sich, den Quellzweig zu löschen. Das Löschen des Quellzweigs verhindert Verwirrung, da der Themazweig selbst nicht über ein Commit-Zusammenführen in den Standardzweig verfügt.

Vollständige Pullanforderungen mit Squashdruck

Sie können beim Abschließen einer Pullanfrage in Azure Repos einen Squashdruck auswählen.

Wählen Sie "Squash commit"unter " Zusammenführen" im Dialogfeld "Vollständige Pull-Anforderung " aus, um den Themenzweig zusammenzuführen.

Screenshot of closing a pull request with a squash merge in Azure Repos.

Vollständige Pullanforderungen mit Squashdruck

Sie können beim Abschließen einer Pullanfrage in Azure Repos einen Squashdruck auswählen.

Wählen Sie Squashänderungen beim Zusammenführen im Dialogfeld "Vollständige Pull-Anforderung " aus, um den Themenzweig zusammenzuführen.

Screenshot of closing a pull request with a squash merge in Azure Repos.

Mehrere Zusammenführungsbasen

Die Registerkarte "Dateien " in einer Pullanforderung erkennt Diffs anhand eines dreiseitigen Vergleichs. Der Algorithmus berücksichtigt den letzten Commit im Zielzweig, den letzten Commit in der Quellzweigung und deren gemeinsame Zusammenführungsbasis. Der Algorithmus ist eine schnelle, kosteneffiziente und zuverlässige Methode zum Erkennen von Änderungen. Leider gibt es in einigen Fällen mehr als eine wahre Basis. In den meisten Repositorys ist diese Situation selten, aber in großen Repositorys mit vielen aktiven Benutzern kann es häufig vorkommen.

Die folgenden Szenarien können mehrere Basen verursachen:

  • Zusammenführen zwischen verschiedenen Zweigen
  • Aktive Wiederverwendung von Featurezweigen
  • Behandeln von Nachschlagezeichen von Hauptzweig-Reverts
  • Andere nicht intuitive und konvolutierte Manipulationen mit Reverts, Kirschauswahlen und Zusammenführungen

Mehrere Zusammenführungsbasiserkennung ist Teil des Sicherheitsbewusstseins. Wenn mehrere Zusammenführungsbasen vorhanden sind, erkennt der Datei-Diff-Algorithmus für die Benutzeroberfläche möglicherweise keine Dateiänderungen, je nachdem, welche Zusammenführungsbasis sie ausgewählt hat. Wenn die Dateien in der Pullanforderung verschiedene Versionen zwischen den Zusammenführungsbasen aufweisen, tritt eine Mehrfachdruckbasiswarnung auf.

Mögliche Sicherheitsrisiken beim Zusammenführen aus mehreren Basisn

  • Ein böswilliger Benutzer könnte den UI-Algorithmus missbrauchen, um böswillige Änderungen vorzunehmen, die nicht in der PR vorhanden sind.
  • Wenn Änderungen, die in der PR vorgeschlagen wurden, bereits in der Zielzweigung enthalten sind, werden sie auf der Registerkarte "Dateien " angezeigt, aber möglicherweise keine Verzweigungsrichtlinien auslösen, die Ordneränderungen zugeordnet sind.
  • Zwei Sätze von Änderungen an den gleichen Dateien aus mehreren Zusammenführungsbasen sind möglicherweise nicht in der PR vorhanden. In diesem Fall könnten verwachsige Logiklücken entstehen.

Beheben des Problems mit mehreren Zusammenführungsbasen

Das Vorhandensein mehrerer Zusammenführungsbasen ist nicht unbedingt schlecht, aber Sie sollten überprüfen, ob alles gut ist. Um mehrere Zusammenführungsbasen loszuwerden, binden Sie Verzweigungen an einen einzigen gemeinsamen Vorgänger. Erstellen Sie entweder die Basis ihres Zweigs auf Ziel, oder führen Sie das Ziel in den Hauptbereich ein. Diese Aktionen entfernen die Warnmeldung und helfen Ihnen bei der Überprüfung, ob die tatsächlichen Änderungen in Ordnung sind.

Ein Ansatz besteht darin, ihren Fortschritt weich zurückzusetzen und zu wiederherstellen oder zusammenzuführen. Anschließend können Sie eine neue Verzweigung erstellen oder eine leere basisieren und Ihre Änderungen aus einem klaren Punkt anwenden. Dieser Prozess erfordert möglicherweise einen Force Push an Remote, wenn Ihre Änderungen bereits vorhanden sind.

So vermeiden Sie das Problem mit mehreren Zusammenführungsbasen

Hier sind allgemeine Tipps zum Vermeiden des Problems mit mehreren Zusammenführungsbasisn:

  • Erstellen Sie beim Vorbereiten einer Pullanforderung Funktionszweige aus den neuesten Versionen des Haupt- oder Release-Branchs.
  • Vermeiden Sie das Erstellen von Zweigen, die nicht direkt aus stabilen Zweigen Ihres Repositorys stammen, sofern nicht erforderlich.

Vorgehensweise, wenn das Problem mit mehreren Zusammenführungsbasen wieder angezeigt wird

In großen Repos mit vielen aktiven Mitwirkenden kann dieses Problem besonders unzuverwendbar sein. Selbst wenn Sie mehrere Basen über die Zusammenführung loswerden, kann die Situation wieder angezeigt werden. Wenn jemand eine lange pull-Anforderung schließt, kann dies die Situation neu erstellen. Obwohl Buildrichtlinien und Tests ausgeführt werden, müssen Sie die Pullanforderung nicht abschließen. Das Zurücksetzen und Starten eines neuen Zweigs kann helfen. Wenn nichts geändert wird, sind Ihre Änderungen wahrscheinlich klar, auch wenn sich die Situation wiederholt.

Nächste Schritte