Freigeben über


Mergestrategien und Squashmerge

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022

Wenn Sie eine Pullanforderung abschließen, führen Sie die Themenverzweigung in Ihrer Standardverzweigung zusammen, in der Regel main. Mit dieser Zusammenführung werden die Commits der Themenverzweigung zu Ihrer Hauptverzweigung hinzugefügt und ein Zusammenführungs-Commit erstellt, um Konflikte zwischen der Standard- und Themenverzweigung abzugleichen. Die Kommentare und Diskussionen in der Pull-Anforderung geben mehr Kontext für die Änderungen, die in der Themenzweig vorgenommen wurden.

Beispiel für einen regulären Seriendruck aus einer Pullanforderung.

Der Commitverlauf in Ihrer main Verzweigung (oder einer anderen Standardverzweigung) folgt aufgrund des verknüpften Themenverzweigungsverlaufs nicht einer geraden Zeile. Da ein Projekt größer wird, steigt die Anzahl der Themenzweige, an denen gleichzeitig gearbeitet wurde, wodurch die Standardzweiggeschichte immer schwieriger zu verfolgen ist.

Die Standardverzweigung ist eine genaue Darstellung des Verlaufs der einzelnen Themenzweige, aber es ist schwierig, umfassendere Fragen zur Entwicklung Ihres Projekts zu beantworten.

Voraussetzungen

Kategorie Anforderungen
Projektzugriff Mitglied eines Projekts.
Erlaubnisse - Code in privaten Projekten anzeigen: Mindestens einfacher Zugriff.
- Klonen oder Mitwirken an Code in privaten Projekten: Mitglied der Sicherheitsgruppe "Mitwirkende" oder entsprechende Berechtigungen im Projekt.
– Legen Sie Verzweigungs- oder Repositoryberechtigungen fest: Berechtigungen für die Verzweigung oder das Repository verwalten .
- Standardverzweigung ändern: Bearbeiten von Richtlinienberechtigungen für das Repository.
- Importieren eines Repositorys: Mitglied der Sicherheitsgruppe "Projektadministratoren " oder "Git-Projektebene Repository erstellen"-Berechtigungssatz auf "Zulassen". Weitere Informationen finden Sie unter Festlegen von Git-Repositoryberechtigungen.
Dienste Repos aktiviert.
Werkzeuge Wahlfrei. Verwenden Sie az repos-Befehle : Azure DevOps CLI.

Hinweis

In öffentlichen Projekten haben Benutzer mit Stakeholder-Zugriff vollzugriff auf Azure Repos, einschließlich Anzeigen, Klonen und Beitragen zu Code.

Kategorie Anforderungen
Projektzugriff Mitglied eines Projekts.
Erlaubnisse - Code anzeigen: Mindestens einfacher Zugriff.
- Klonen oder Zum Code beitragen: Mitglied der Sicherheitsgruppe "Mitwirkende " oder entsprechende Berechtigungen im Projekt.
Dienste Repos aktiviert.

Zusammenführen

Merge ist eine Zusammenführungsoption, mit der Sie den Git-Verlauf von Themenzweigen zusammenführen können, wenn Sie eine Pullanforderung abschließen. Anstatt jeden Commit für die Themenverzweigung zum Verlauf der Standardverzweigung hinzuzufügen, fügt ein Merge alle Dateiänderungen zu einem einzelnen neuen Commit für die Standardverzweigung hinzu. Merge Commit für Merge hat keinen Verweis auf die Themenverzweigung. Es erzeugt einen neuen Commit , der alle Änderungen aus dem Themenzweig enthält. Es wird empfohlen, den Themenzweig zu löschen, um Verwirrung zu vermeiden.

Diagramm der Zusammenführung in Pullanforderungen in Azure Repos.

Eine einfache Möglichkeit, dies zu berücksichtigen, besteht darin, dass Ihnen die Seriendruck nur die Dateiänderungen bietet, und eine regelmäßige Zusammenführung gibt Ihnen die Dateiänderungen und den Commit-Verlauf.

Wie ist ein Merge hilfreich?

Die Zusammenführung von Workflows sorgt dafür, dass Ihre Standardmäßige Verzweigungshistorien sauber und einfach zu verfolgen sind, ohne dass Workflowänderungen in Ihrem Team gefordert werden. Mitwirkende an der Themenverzweigung arbeiten wie gewünscht in der Themenverzweigung, und die Standardverzweigungen behalten eine lineare Geschichte mithilfe von Merges. Der Commit-Verlauf einer main Verzweigung, die mit Merges aktualisiert wird, hat einen Commit für jede zusammengeführte Verzweigung. Sie können diesen Verlauf schrittweise durchlaufen, um genau herauszufinden, wann die Arbeit abgeschlossen wurde.

Überlegungen beim Zusammenführen von Daten

Die Zusammenführung von Merge verdichtet die Geschichte der Änderungen in Ihrer Standardverzweigung, daher ist es wichtig, mit Ihrem Team zusammenzuarbeiten, um zu entscheiden, wann sie zusammenführen möchten, anstatt die vollständige Commit-Geschichte eines Themenzweigs beizubehalten. Beim Zusammenführen von Merge empfiehlt es sich, den Quellzweig zu löschen. Durch das Löschen der Quellverzweigung wird Verwirrung verhindert, da die Themenverzweigung selbst keinen Commit zum Zusammenführen in die Standardverzweigung hat.

Vollständige Pullanforderungen mit Merge

Sie können beim Abschließen einer Pullanforderung in Azure Repos auswählen, ob sie zusammenführen möchten.

Wählen Sie im Dialogfeld "Vollständige Pullanforderung" unter "Merge commit" die Option "Commit übernehmen"aus, um den Themenzweig zusammenzuführen.

Screenshot des Schließens einer Pullanforderung mit einem Seriendruck 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 in der Zielverzweigung, den letzten Commit in der Quellverzweigung und deren gemeinsame Zusammenführungsbasis, z. B. den am besten verwendeten Vorgänger. Der Algorithmus ist eine schnelle, kosteneffiziente und zuverlässige Methode zum Erkennen von Änderungen. Leider gibt es in einigen Fällen mehr als eine echte Basis. In den meisten Repositorys ist dies selten, aber in großen Repositorys mit vielen aktiven Benutzern kann es üblich sein. Sie können manuell überprüfen, ob mehrere Zusammenführungsbasen zwischen den Verzweigungen vorhanden sind. Führen Sie dazu den Befehl aus git merge-base --all feature master . Azure DevOps erkennt das Vorhandensein mehrerer Zusammenführungsbasen für jede PR. Wenn diese erkannt werden, zeigt Azure DevOps die Meldung "Mehrere Zusammenführungsbasen erkannt. Die Liste der angezeigten Commits ist möglicherweise unvollständig" für die PR. Während Azure DevOps die Erkennung mehrerer Zusammenführungsbasen ausführt, wird nicht überprüft, ob die potenzielle Zusammenführungsbasis bereits zusammengeführt wurde oder nicht. Diese Überprüfung erfolgt durch git merge-base. Aus diesem Grund zeigt Azure DevOps möglicherweise die Meldung auch dann an, wenn git merge-base nur eine Zusammenführungsbasis gemeldet wird.

Hinweis

Falls Sie während einer PR-Überprüfung Änderungen verloren haben, stellen Sie sicher, dass mehrere Zusammenführungsbasen nicht die Ursache sind.

Die folgenden Beispielszenarien werden von Azure DevOps als mehrere Basen erkannt, wobei die Zusammenführungsbasen durch Zahlen 1 und zwei angegeben sind:

  • Cross-Merges (auch als Criss-Cross bezeichnet) zwischen verschiedenen Zweigniederlassungen (berichtet von Azure DevOps und git merge-base)
---1---o---A
    \ /
     X
    / \
---2---o---o---B
  • Zusammenführen einer Verzweigung mit anderen zwei (von Azure DevOps gemeldet, aber nicht dadurch git merge-base wird die Zusammenführungsbasis 2 beseitigt)
---1---o---o---o---A
    \         /
     \-------2
      \       \
       \---o---o---o---B
  • Behandlung von Rückgängen der Hauptverzweigung, z. B. Ändern des Zusammenführungs-Commits
*   42bb2d2 (HEAD, A) Amended merge commit
|\  
| | *   67c9bb8 (other) Merge branch 'A' into B
| | |\  
| |/ /  
|/| /   
| |/    
| * fa78e32 add second commit
* | 15845c9 add first commit
|/  
* 6a52130 add init
  • Aktive Wiederverwendung von Featureverzweigungen
  • Andere nichtintuitive und konvolutierte Manipulationen mit Reverts, Kirschauswahlen und Zusammenführungen

Die Erkennung mehrerer Zusammenführungsbasis 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 auswäht. Wenn die Dateien in der Pullanforderung unterschiedliche Versionen zwischen den Zusammenführungsbasen aufweisen, tritt eine Mehrfachzusammenführungsbasiswarnung auf.

Weitere Details erhalten Sie in der offiziellen Git-Dokumentation .

Potenzielle Sicherheitsrisiken der Zusammenführung aus mehreren Basen

  • Ein böswilliger Benutzer könnte den BENUTZERoberflächenalgorithmus missbrauchen, um böswillige Änderungen zu übernehmen, die in der PR nicht vorhanden sind.
  • Wenn änderungen, die in der PR vorgeschlagen werden, bereits in der Zielverzweigung enthalten sind, werden sie auf der Registerkarte "Dateien " angezeigt, lösen jedoch möglicherweise keine Verzweigungsrichtlinien aus, die Ordneränderungen zugeordnet sind.
  • Zwei Gruppen von Änderungen an denselben Dateien aus mehreren Zusammenführungsbasen sind möglicherweise nicht in der PR vorhanden. In diesem Fall könnten trügerische Logiklücken entstehen.

Beheben des Problems mit mehreren Zusammenführungsbasen

Mehrere Zusammenführungsbasen zu haben, ist nicht unbedingt schlecht, aber Sie sollten überprüfen, ob alles in Ordnung ist. Um mehrere Zusammenführungsbasen zu entfernen, binden Sie die Verzweigungen an ein einzelnes gemeinsames Vorgänger, indem Sie ihre Verzweigung entweder auf zielbasieren oder das Zusammenführen von Zielzielen in Ihre Verzweigung integrieren. Diese Aktionen entfernen die Warnmeldung und helfen Ihnen zu überprüfen, ob die tatsächlichen Änderungen in Ordnung sind.

Ein Ansatz besteht darin, den Fortschritt vor dem Neubasieren oder Zusammenführen vorläufig zurückzusetzen und zu schieben. Anschließend können Sie eine neue Verzweigung erstellen oder eine leere Verzweigung neu erstellen und Ihre Änderungen aus einem klaren Punkt anwenden. Bei diesem Vorgang ist möglicherweise ein Erzwungener Push auf remote erforderlich, wenn Ihre Änderungen bereits vorhanden sind.

Vermeiden des Problems mit mehreren Zusammenführungsbasen

Hier sind allgemeine Tipps zum Vermeiden des Seriendruckbasisproblems:

  • Erstellen Sie bei der Vorbereitung einer Pullanforderung Funktionszweige aus den neuesten Versionen der Haupt- oder Release-Verzweigung.
  • Vermeiden Sie das Erstellen von Verzweigungen, die nicht direkt aus stabilen Verzweigungen Ihres Repositorys stammen, es sei denn, dies ist erforderlich.

Was zu tun ist, wenn das Problem mit mehreren Zusammenführungsbasen wieder auftritt

In großen Reposs mit vielen aktiven Mitwirkenden kann dieses Problem besonders unannelich sein. Auch wenn Sie mehrere Basen über die Zusammenführung loswerden, könnte die Situation wieder auftreten. Wenn jemand eine langstehende Pullanforderung schließt, kann dies die Situation neu erstellen. Obwohl Buildrichtlinien und Tests ausgeführt werden, haben Sie keine Möglichkeit, die Pullanforderung abzuschließen. Das Zurücksetzen und Starten einer neuen Verzweigung kann hilfreich sein. Wenn nichts geändert wird, sind Ihre Änderungen wahrscheinlich klar, auch wenn sich die Situation wiederholt.

Nächste Schritte