Zum Inhalt springen
GitTree

Git-Anleitungen

So lösen Sie Git-Merge-Konflikte in der Befehlszeile und in einem Drei-Wege-Editor

So lösen Sie Zusammenführungskonflikte in Git: Lesen Sie die Konfliktmarkierungen, beheben Sie sie mit einfachen Git-Befehlen oder in einem visuellen Drei-Wege-Editor und sehen Sie die kommenden Konflikte, bevor Sie die Zusammenführung durchführen. Plus rerere, sicheres Abbrechen und Rückgängigmachen einer Zusammenführung.

Geschrieben von KodmoraAktualisiert 14 Min. gelesen
GitTree Zweigmenü mit Optionen zum Zusammenführen, Rebase, interaktivem Rebase, Schnellvorlauf und Zurücksetzen, die beide Zweige benennen

Um Zusammenführungskonflikte in Git zu lösen, öffnen Sie jede Datei, die Git als Konflikt meldet, entscheiden Sie, wie der Code zwischen den Markierungen <<<<<<<, ======= und >>>>>>> aussehen soll, löschen Sie die Markierungen, stellen Sie die Datei mit git add bereit und schließen Sie mit git commit (oder git merge --continue) ab. Um stattdessen zurückzukehren, führen Sie git merge --abort aus. Dieser Leitfaden durchläuft diese Schleife in der Befehlszeile, dann in einem visuellen Drei-Wege-Editor und endet mit den Gewohnheiten, die Konflikte seltener und einfacher rückgängig zu machen machen. Nehmen Sie an der kostenlosen Lektion Aktiven Vorgang fortsetzen, überspringen oder abbrechen teil, um die Auswahlmöglichkeiten zu üben, die Ihnen eine angehaltene Zusammenführung, Rebase oder Cherry-Pick bietet.

Die visuellen Beispiele verwenden GitTree, den Git-Client, den wir für macOS, Windows und Linux erstellen. Es führt das auf Ihrem Computer installierte Git aus. Klicken und Tippen führen also zum gleichen Ergebnis. Die GitTree Feature-Liste bietet ein umfassenderes Bild.

Was für ein Zusammenführungskonflikt in Git eigentlich ist

Git führt Zeile für Zeile unter Verwendung von drei Versionen jeder Datei zusammen: die Basis (der letzte Commit, den beide Zweige gemeinsam nutzen), unsere (Ihr aktueller Zweig, HEAD) und ihre (der eingehende Zweig, MERGE_HEAD). Wenn nur eine Seite eine Region geändert hat, übernimmt Git diese Änderung. Wenn beide Seiten die gleichen Zeilen unterschiedlich geändert haben, stoppt Git, schreibt beide Versionen in die Datei und überlässt die Entscheidung Ihnen.

Das Gleiche kann in git pull, git rebase, git cherry-pick, git revert und git stash pop passieren. Der Fix ist identisch; nur der letzte Befehl unterscheidet sich. git status beschriftet jeden in Konflikt stehenden Pfad:

  • beide geändert: Beide Zweige haben die gleichen Zeilen geändert. Dies ist der häufigste Fall.
  • Von uns gelöscht / von ihnen gelöscht: Eine Seite hat die Datei gelöscht und die andere Seite hat sie geändert, Sie behalten also die geänderte Datei oder bestätigen den Löschvorgang.
  • beide hinzugefügt: Jeder Zweig hat eine andere Datei im selben Pfad erstellt.

So beheben Sie Zusammenführungskonflikte in der Befehlszeile

1. Suchen Sie die in Konflikt stehenden Dateien

Git listet die Konflikte auf, sobald die Zusammenführung stoppt, und git status behält die Liste bei, bis Sie fertig sind. git diff --name-only --diff-filter=U gibt nur die nicht zusammengeführten Pfade aus.

$ git merge feature/login
Auto-merging src/auth.ts
CONFLICT (content): Merge conflict in src/auth.ts
Automatic merge failed; fix conflicts and then commit the result.

$ git status
On branch main
You have unmerged paths.

Unmerged paths:
  (use "git add <file>..." to mark resolution)
        both modified:   src/auth.ts

2. Lesen Sie die Konfliktmarkierungen

Alles außerhalb der Markierungen verschmolz sauber. Der Block nach <<<<<<< HEAD ist Ihr aktueller Zweig, der Block vor >>>>>>> feature/login ist der eingehende und die Zeile ======= trennt sie.

export const retries = 3;
<<<<<<< HEAD
export const timeout = 45;
=======
export const timeout = 60;
>>>>>>> feature/login
export const debug = false;

Zwei Versionen reichen oft nicht aus, um eine Entscheidung zu treffen. Legen Sie Gits zdiff3-Konfliktstil einmal fest, und jeder Konflikt zeigt auch die Basis nach einer |||||||-Zeile an:

$ git config --global merge.conflictStyle zdiff3

<<<<<<< HEAD
export const timeout = 45;
||||||| 556e564
export const timeout = 30;
=======
export const timeout = 60;
>>>>>>> feature/login

Jetzt können Sie sehen, dass main das Timeout von 30 auf 45 und den Feature-Zweig auf 60 erhöht hat: Entscheiden Sie, welchen Wert das Produkt benötigt, und nicht, welcher Zweig gewinnt.

3. Bearbeiten Sie die Datei und markieren Sie sie als gelöst

Schreiben Sie den gewünschten Code (eine Seite, die andere, eine Mischung oder etwas Neues) und löschen Sie jede Markierungszeile. Lassen Sie Git vor der Bereitstellung nach Resten suchen, da ein versehentlich begangener Streuner ======= ein klassischer fehlerhafter Build ist.

$ git diff --check          # lists any leftover conflict markers
$ git add src/auth.ts
$ git commit                # or: git merge --continue

Wenn die Version der gesamten Datei auf einer Seite richtig ist, nehmen Sie sie direkt. Damit Git bei der Zusammenführung für jedes in Konflikt stehende Stück eine Seite bevorzugt, starten Sie die Zusammenführung stattdessen mit git merge -X ours oder git merge -X theirs. Änderungen, die keinen Konflikt verursachen, kommen dennoch aus beiden Zweigen.

$ git checkout --ours -- src/auth.ts     # keep the current branch's version
$ git checkout --theirs -- src/auth.ts   # keep the incoming version
$ git add src/auth.ts

4. Beenden Sie den Vorgang

Wenn jede Datei bereitgestellt ist, fahren Sie mit dem fort, was gestoppt wurde: git commit (oder git merge --continue), git rebase --continue, git cherry-pick --continue oder git revert --continue. Ein Rebase kann bei einem späteren Commit erneut gestoppt werden; Wiederholen Sie die Schleife.

Git-Befehle, die helfen, während ein Konflikt offen ist
BefehlWas es zeigt
git diffEin kombinierter Vergleich jeder Konfliktdatei mit beiden Seiten
git log --merge -p <path>Die Commits auf jeder Seite, die die Datei berührt haben, mit ihren Unterschieden
git show :1:<path>Die Basisversion der Datei
git show :2:<path>, git show :3:<path>Ihre Version (HEAD) und die eingehende Version (MERGE_HEAD)
git mergetoolÖffnet das in Git konfigurierte Zusammenführungstool, jeweils eine in Konflikt stehende Datei
Das integrierte Terminal ist unter dem Commit-Graph in GitTree angedockt und führt neben der visuellen Ansicht Ihre eigene Shell aus.
Das integrierte Terminal ist unter dem Commit-Graph in GitTree angedockt und führt neben der visuellen Ansicht Ihre eigene Shell aus.

Lösen Sie Zusammenführungskonflikte in einer GUI: ein Drei-Wege-Git-Konfliktlöser

Markierungen sind für einen Zwei-Linien-Konflikt in Ordnung. Bei einem Dutzend Konflikten in einer langen Datei ist ein GUI-Konfliktlöser schneller und es ist viel schwieriger, Fehler zu machen. Ein gutes Git-Tool zum Zusammenführen von Konflikten zeigt alle drei Versionen zusammen an, lässt Sie Konflikt für Konflikt entscheiden und verweigert das Speichern, solange Markierungen verbleiben.

In GitTree wird bei einer Zusammenführung, die angehalten wird, ein Banner mit der Anzahl der Konflikte und einer Liste der in Konflikt stehenden Dateien angezeigt. Öffnen Sie eines und der Editor nimmt das gesamte Fenster ein: oben die aktuellen und eingehenden Zweige nebeneinander, jeder mit seinem Zweignamen beschriftet, und darunter die Ausgabe, die Datei, wie sie gespeichert wird.

  • Pro Konflikt: Nehmen Sie die aktuelle Seite, die eingehende Seite, beide oder keines von beiden oder wählen Sie jeweils einzelne Zeilen aus.
  • Bearbeiten Sie die Ausgabe manuell für alles, was die Schaltflächen nicht abdecken.
  • Basis anzeigen, um den gemeinsamen Vorfahren anzuzeigen (Git schreibt ihn, wenn merge.conflictStyle diff3 oder zdiff3 ist).
  • Auswahl rückgängig machen, um Ihre Entscheidungen rückgängig zu machen.
  • Gelöschte Dateien: Wenn eine Seite eine Datei gelöscht hat, hat die andere Seite sie geändert. Behalten Sie die Datei dieser Seite oder bestätigen Sie den Löschvorgang.

GitTree speichert kein Ergebnis, das noch Markierungslinien enthält. Es kann die Datei auch in Ihrem externen Zusammenführungstool öffnen: VS Code, Cursor, JetBrains IDEs, Beyond Compare, Meld, KDiff3, P4Merge, WinMerge, ein benutzerdefiniertes Programm oder Gits eigenes merge.tool. Wenn das Tool geschlossen wird, ohne die Datei aufzulösen, bleibt die Datei im Konflikt.

So lösen Sie einen Zusammenführungskonflikt in GitTree Schritt

  1. Starten Sie die Zusammenführung

    Öffnen Sie das Zweigmenü für den Zweig, den Sie einfügen möchten, und führen Sie ihn in Ihren aktuellen Zweig ein oder ziehen Sie einen Zweig auf einen anderen. Das Menü benennt beide Zweige, so dass die Richtung nie erraten werden kann.

  2. Lesen Sie die Konfliktvorschau

    Bevor sich etwas ändert, sagt der Zusammenführungsdialog, dass die Zweige ohne Konflikte zusammengeführt werden, oder listet die Dateien auf, bei denen die Zusammenführung angehalten wird. Wählen Sie aus, wie die Zusammenführung aufgezeichnet werden soll, und bestätigen Sie dann.

  3. Öffnen Sie die in Konflikt stehenden Dateien

    Wenn die Zusammenführung stoppt, zählt das Banner die Konflikte und die Dateiliste zeigt jede in Konflikt stehende Datei an. Öffnen Sie das erste im Drei-Wege-Editor.

  4. Entscheiden Sie jeden Konflikt

    Nehmen Sie die aktuelle Seite, die eingehende Seite, beide oder keine, wählen Sie einzelne Zeilen aus oder bearbeiten Sie die Ausgabe. Verwenden Sie Show Base, um den Code anzuzeigen, bevor ihn einer der Zweige geändert hat.

  5. Speichern und markieren Sie die Datei als gelöst

    Wählen Sie „Speichern und als gelöst markieren“. GitTree schreibt die Datei und stellt sie bereit, dann fahren Sie mit der nächsten fort. Es weigert sich, solange die Konfliktmarkierungslinien bestehen bleiben.

  6. Führen Sie die Zusammenführung durch

    Wenn jede Datei aufgelöst ist, wählen Sie „Commit and Merge“ (Rebase fortsetzen für ein Rebase). Haben Sie es sich später anders überlegt? Setzen Sie den Zweig über das Commit-Menü auf den Commit zurück, in dem er sich vor der Zusammenführung befand. GitTree erstellt zunächst einen Snapshot des Zurücksetzens, damit Rückgängig es rückgängig machen kann.

Das Commit-Diagramm im Light-Design von GitTree mit ausgewähltem Merge-Commit, bei dem zwei Zweigspuren zusammenkommen.
Das Commit-Diagramm im Light-Design von GitTree mit ausgewähltem Merge-Commit, bei dem zwei Zweigspuren zusammenkommen.

Sagen Sie Zusammenführungskonflikte voraus, bevor Sie zusammenführen

Seit Git 2.38 führt git merge-tree --write-tree eine Zusammenführung im Speicher durch, ohne Ihren Arbeitsbaum oder Index zu lesen oder zu schreiben und ohne einen Commit durchzuführen. Mit --name-only werden die Dateien aufgelistet, bei denen es zu Konflikten kommen würde; Der Exit-Status ist 1, wenn Konflikte vorliegen, und 0, wenn die Zusammenführung sauber wäre.

$ git fetch
$ git merge-tree --write-tree --name-only HEAD origin/main
0d708adc4a836d088802870278cb1f3daf06355f
src/auth.ts

Auto-merging src/auth.ts
CONFLICT (content): Merge conflict in src/auth.ts

GitTree führt diese Vorschau für Sie aus: Im Zusammenführungsdialog wird das vorhergesagte Ergebnis angezeigt, bevor Sie es bestätigen. Nach jedem Abruf vergleicht es außerdem Ihren Branch mit seinem Upstream- und dem Basis-Branch (Haupt- oder Master-Zweig, es sei denn, Sie legen einen anderen fest) und zeigt neben dem Filialnamen eine Warnung an, z. B. „Würde in zwei Dateien mit dem Hauptzweig in Konflikt geraten“. Ein zweiter Hinweis markiert Dateien, die Sie ändern, sodass sich auch andere abgerufene, nicht zusammengeführte Zweige ändern.

Bei beiden Prüfungen wird nur das verwendet, was Sie bereits abgerufen haben: Es wird nichts abgerufen, zusammengeführt oder geändert, um sie zu berechnen, und nichts verlässt Ihren Computer. Beides kann in den Einstellungen deaktiviert werden.

Konfliktlösungen mit git rerere wiederverwenden

Rerere steht für „Aufgezeichnete Auflösung wiederverwenden“. Wenn diese Option aktiviert ist, zeichnet Git jeden Konflikt und die Art und Weise auf, wie Sie ihn gelöst haben. Wenn der gleiche Konflikt erneut auftritt, beispielsweise bei einem wiederholten Rebase eines langlebigen Zweigs oder einer von Ihnen wiederholten Zusammenführung, schreibt Git Ihre frühere Lösung in die Datei.

$ git config --global rerere.enabled true
$ git rerere forget src/auth.ts   # drop a recorded resolution that was wrong

Git lässt das wiederverwendete Ergebnis zur Überprüfung nicht bereitgestellt, es sei denn, rerere.autoUpdate ist festgelegt. In GitTree verfügen die Repository-Einstellungen über die Schalter Aufgezeichnete Auflösungen wiederverwenden (rerere) und Wiederverwendete Auflösungen bereitstellen für diese Git-Optionen; Die Konfliktansicht kennzeichnet eine wiederverwendete Lösung und Lösung vergessen löscht eine falsche.

So brechen Sie eine Zusammenführung in Git ab oder brechen sie ab

Um eine Zusammenführung abzubrechen, die aufgrund von Konflikten gestoppt wurde, führen Sie git merge --abort aus. Ein Rebase, Cherry-Pick oder Revert hat seinen eigenen Abbruch:

$ git merge --abort
$ git rebase --abort
$ git cherry-pick --abort
$ git revert --abort

Die eigene Dokumentation von Git warnt davor, dass git merge --abort nicht immer nicht festgeschriebene Änderungen wiederherstellen kann, die Sie zu Beginn der Zusammenführung vorgenommen haben. Commit oder Stash vor dem Zusammenführen, und beim Abbruch muss nur die Commit-Arbeit wiederhergestellt werden.

In GitTree erklärt Abort Merge (oder Abort Rebase, Cherry-Pick, Revert) zunächst, dass Git den Zweig, den Index und die Arbeitskopie von vor dem Vorgang wiederherstellt und die bisher vorgenommenen Auflösungen verwirft. GitTree speichert alles, was durch den Abbruch verloren geht, ob inszeniert oder nicht, in Wiederherstellungs-Snapshots, sodass Sie es durch Rückgängig wiederherstellen können.

So machen Sie eine Zusammenführung rückgängig, nachdem Sie sie festgeschrieben haben

Was zu tun ist, hängt davon ab, ob Sie die Zusammenführung vorangetrieben haben:

# Not pushed yet, right after the merge:
$ git reset --hard ORIG_HEAD     # also discards uncommitted changes
$ git reset --merge ORIG_HEAD    # keeps uncommitted changes

# Already pushed:
$ git revert -m 1 <merge-commit> # a new commit that reverses it

Bei einer Zusammenführung wird der vorherige Tipp Ihres Zweigs in ORIG_HEAD gespeichert. Durch das Zurücksetzen wird die Zusammenführung also entfernt, es sei denn, ein späteres Zurücksetzen oder Rebase verschiebt ORIG_HEAD. Sobald andere die Zusammenführung haben, kehren Sie stattdessen zurück. Durch das Rückgängigmachen einer Zusammenführung wird Git mitgeteilt, dass Sie diese Änderungen niemals möchten: Durch das erneute Zusammenführen dieses Zweigs werden sie nicht wiederhergestellt, es sei denn, Sie machen das Zurücksetzen rückgängig.

Wählen Sie in GitTree das erste übergeordnete Element der Zusammenführung (den Commit, auf dem sich Ihr Zweig zuvor befand) im Diagramm aus und wählen Sie im Commit-Menü einen Soft-, Mixed- oder Hard-Reset aus, wobei jeder mit dem beschriftet ist, was er behält. GitTree erstellt Snapshots von 19 Arten von Vorgängen, bevor sie ausgeführt werden, einschließlich Zurücksetzungen, sodass „Rückgängig“ das Zurücksetzen rückgängig machen kann und die Reflog-Ansicht ältere Zustände wiederherstellt. Die Anleitung zum Rückgängigmachen eines Zurücksetzens, Rebases oder Commits behandelt die Wiederherstellung ausführlich.

So verhindern Sie die meisten Zusammenführungskonflikte

  • Halten Sie die Zweige klein und kurzlebig. Je länger zwei Zweige auseinanderlaufen, desto mehr Linien berühren sie.
  • Bringen Sie den Basiszweig oft ein, nicht einmal am Ende.
  • Trennen Sie die Formatierung von der Logik. Vereinbaren Sie einen Formatierer und führen Sie die Neuformatierung der gesamten Datei selbstständig durch.
  • Generieren Sie Sperrdateien neu, anstatt sie manuell zusammenzuführen. Übernehmen Sie eine Seite und führen Sie dann Ihren Paketmanager erneut aus.
  • Zdiff3 einschalten und einmal wiederholen. Zwei Befehle, nachhaltiger Nutzen.
  • Vor der Integration festschreiben oder stashen, damit jeder Abbruch und jedes Rückgängigmachen exakt ist.

Möchten Sie zunächst an einem sicheren Repository üben? Die kostenlose Lektion Diverged Branches zusammenführen und beide übergeordneten Zweige verifizieren in den Git-Tutorials führt Sie durch eine echte Zusammenführung. Wägen Sie immer noch das Terminal gegen eine GUI ab? Git GUI vs. Befehlszeile vergleicht beide ehrlich.

GitTree verfügt über einen kostenlosen Plan, der alle Git-Funktionen abdeckt, einschließlich privater Repositories, und Nour, der KI-Assistent, wird mit GitTree Pro geliefert (siehe Preise); Es benötigt Git 2.39 oder neuer und ein GitTree-Konto, um sich anzumelden. Holen Sie es sich für macOS, Windows oder Linux oder sehen Sie sich alle Installationsprogramme auf der GitTree Download-Seite an. Am Ubuntu 22.04 zuerst Git aktualisieren. Sie stecken in einem hartnäckigen Konflikt fest? Fragen Sie den GitTree-Support.

Häufig gestellte Fragen

Was verursacht einen Zusammenführungskonflikt in Git?

Ein Zusammenführungskonflikt tritt auf, wenn zwei Zweige dieselben Zeilen einer Datei auf unterschiedliche Weise ändern oder wenn ein Zweig eine Datei löscht, die der andere geändert hat. Git kombiniert Änderungen an verschiedenen Teilen einer Datei automatisch, kann jedoch nicht zwischen zwei Änderungen an denselben Zeilen wählen, sodass es anhält und Sie zur Entscheidung auffordert.

Wie kann ich eine Zusammenführung in Git abbrechen?

Führen Sie git merge --abort aus, während die Zusammenführung aufgrund von Konflikten gestoppt wird. Git setzt den Zweig, den Index und den Arbeitsbaum wieder auf den Zustand zurück, in dem sie vor Beginn der Zusammenführung waren. Für einen Rebase, Cherry-Pick oder Revert verwenden Sie git rebase --abort, git cherry-pick --abort oder git revert --abort. Wenn die Zusammenführung bereits als Commit abgeschlossen wurde, gilt der Abbruch nicht mehr: Machen Sie ihn stattdessen mit einem Reset oder einem Revert rückgängig.

Was bedeutet „Sie müssen alle Zusammenführungskonflikte bearbeiten und sie dann mit git add als gelöst markieren“?

Git gibt es aus, wenn Sie versuchen, fortzufahren, normalerweise mit git rebase --continue, während eine Datei immer noch als Konflikt gilt. Öffnen Sie alle Datei-git status-Listen unter nicht zusammengeführten Pfaden, entfernen Sie die Konfliktmarkierungen, führen Sie git add für die Datei aus und fahren Sie erneut fort. Wenn Sie zuerst git diff --check ausführen, werden alle Markierungen angezeigt, die Sie verpasst haben.

Ist es sicher, eine Zusammenführung mit Konflikten abzubrechen?

Ja, wenn Sie zuerst Ihre eigene Arbeit festgeschrieben oder gespeichert haben. git merge --abort stellt den Zweig, den Index und den Arbeitsbaum von vor der Zusammenführung wieder her und verwirft Ihre Auflösungen. Nicht festgeschriebene Änderungen, die Sie vor der Zusammenführung vorgenommen haben, werden möglicherweise nicht genau zurückgegeben, weshalb es wichtig ist, sie zuerst festzuschreiben oder zu speichern. GitTree erstellt Snapshots von allem, was bei einem Abbruch verloren geht, sodass Rückgängig es wiederherstellen kann.

Was bedeuten unsere und ihre in einem Git-Konflikt?

Bei einer Zusammenführung ist „unser“ der Zweig, in dem Sie sich befinden (HEAD), und „ihrer“ ist der Zweig, in dem zusammengeführt wird. Bei einem Rebase tauschen sie: „unser“ ist der Zweig, auf den Sie rebasieren, und „ihrer“ ist Ihr eigener Commit, der wiedergegeben wird. Deshalb überrascht git checkout --ours die Leute mitten in der Rebase. GitTree beschriftet jede Seite mit ihrem Filialnamen und ihrer Rolle.

Wie mache ich eine Zusammenführung rückgängig, die ich bereits durchgeführt habe?

Wenn Sie nicht gepusht haben, führen Sie direkt nach der Zusammenführung git reset --hard ORIG_HEAD oder git reset --merge ORIG_HEAD aus, um Ihre nicht festgeschriebenen Änderungen beizubehalten. Wenn die Zusammenführung bereits in einem gemeinsam genutzten Zweig erfolgt, führen Sie git revert -m 1 <merge-commit> aus, um sie rückgängig zu machen, ohne den Verlauf neu zu schreiben. Setzen Sie in GitTree den Zweig über das Commit-Menü auf den ersten übergeordneten Zweig der Zusammenführung zurück. Das Zurücksetzen wird zunächst als Snapshot erstellt, sodass Sie es mit „Rückgängig“ rückgängig machen können, wenn Sie Ihre Meinung ändern.

Was ist das beste Tool zur Lösung von Git-Merge-Konflikten?

Suchen Sie nach einem Tool zum Zusammenführen von Konflikten, das drei Versionen gleichzeitig anzeigt (Ihre Seite, die eingehende Seite und die gemeinsame Basis), mit dem Sie Konflikt für Konflikt entscheiden können und keine Datei mit darin verbliebenen Markierungen speichert. GitTree enthält einen solchen Drei-Wege-Editor und kann eine Datei auch an das Zusammenführungstool übergeben, das Sie bereits verwenden. Schalten Sie in jedem Fall zdiff3 ein.

Kann Git denselben Konflikt beim nächsten Mal automatisch lösen?

Ja, mit rerere. Führen Sie git config --global rerere.enabled true aus und Git zeichnet auf, wie Sie jeden Konflikt lösen. Wenn genau derselbe Konflikt erneut auftritt, beispielsweise bei einem wiederholten Rebase, schreibt Git Ihre frühere Lösung in die Datei. Sie überprüfen und stellen es trotzdem bereit, es sei denn, rerere.autoUpdate ist aktiviert. GitTree zeigt an, wann eine Lösung wiederverwendet wurde.

Quellen

Behauptungen zu anderen Produkten wurden anhand der offiziellen Seiten auf 28. Oktober 2026 überprüft. Preise und Ausstattung ändern sich; Die Seiten der Anbieter sind die Quelle der Wahrheit.