本文へ移動
cccskills
無料GitHub で公開

reissverschluss-merge

Reißverschluss-Verfahren (englisch: zipper merge) für sehr konfliktreiche Merges: Wenn zwei divergente Branches oder ein PR und sein Zielbranch BEIDE wertvolle, unvereinbar erscheinende Änderungen tragen, wird nicht pauschal eine Seite gewählt, sondern Abschnitt für Abschnitt verglichen, per Entscheidungstabelle (Nimm/Warum) die jeweils bessere Version übernommen, abschnittsweise committet und erst am Ende gepusht. Letzte Eskalationsstufe: Rebuild statt Merge — nur die Absicht/Funktionalität des Branches übernehmen und auf dem aktuellen Stand neu bauen. Nutzen bei: "Merge-Konflikt", "divergente Branches", "main vs. master", "konfliktreicher PR", "zipper merge", "Reißverschluss", "beide Seiten haben Recht", "PR ist zu alt zum Mergen".

インストール方法を見る

含まれるファイル(3)

  • SKILL.md8.8 KB
  • banner.png194.4 KB
  • SKILL.en.md6.1 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

<img src="banner.png" width="100%" alt="reissverschluss-merge banner">

Reißverschluss-Merge (zipper merge)

Wann dieses Verfahren

Zwei Zweige desselben Repos sind stark divergiert und beide tragen Wert — typisch: main vs. master nach paralleler Pflege, ein alter PR gegen einen weitergezogenen Zielbranch, zwei Agenten-/Team-Stände mit je eigenen Fixes. Ein normaler Merge würde entweder eine Seite plattmachen („ours"/„theirs") oder einen unentwirrbaren Konfliktbrei erzeugen. Das Reißverschluss-Verfahren löst das, indem es die Zähne beider Seiten abschnittsweise ineinandergreifen lässt: je Abschnitt gewinnt die nachweislich bessere Version — oder eine begründete Mischung.

Nicht nötig bei trivialen Konflikten (eine Seite offensichtlich veraltet, wenige Hunks): dann normal mergen. Das Verfahren lohnt ab dem Punkt, an dem man für mehrere Dateien/Abschnitte ernsthaft abwägen muss.

Phase 0 — Lagebild und Basiswahl

  1. Beide Seiten vollständig sichten (nicht nur die Konfliktmarker): git log --oneline A..B und B..A, git diff A...B --stat, dann die divergenten Dateien beider Fassungen lesen.
  2. Basis wählen — nach Realität, nicht nach Datum. Basis wird der Branch, der sich mit der veröffentlichten Wirklichkeit deckt: Registry-Stand (npm/PyPI/…), deployte Version, grüne CI, Release-Tags. Ein Branch mit neuerem Datum, aber ohne Deckung zur Außenwelt, ist Material, nicht Basis.
  3. Konsistenz beider Seiten prüfen — oft sind BEIDE in sich inkonsistent (z. B. Basis hat Version X ohne passenden Changelog, Gegenseite pflegt den Changelog, hängt aber bei der Version zurück). Solche Befunde gehören in die Tabelle, nicht unter den Teppich.

Phase 1 — Entscheidungstabelle (der Kern)

Für jeden divergenten Abschnitt (Datei, Block, Feld — so fein wie nötig) eine Zeile:

AbschnittNimmWarum
package.json → versionBasisdeckt sich mit Registry
overrides-BlockGegenseiteenthält Security-Bumps, die der Basis fehlen
↳ darin Eintrag XmischenEintrag der Gegenseite übernehmen, aber auf die neuere Version der Basis heben
Changelog [Unreleased]mischenbeide Blöcke vereinigen, Duplikate raus

Regeln:

  • Fakten statt Vermutung. Jede „Warum"-Zelle stützt sich auf etwas Prüfbares: Registry-Abfrage, Testlauf, Advisory-Datenbank, isolierte Probeinstallation der strittigen Datei. Wer rät, merged Vermutungen.
  • „Mischen" ist ein legitimes Verdikt — der Reißverschluss darf innerhalb eines Abschnitts beide Zähne greifen lassen.
  • Verwerfen ist ein legitimes Verdikt — was auf keiner Seite trägt (toter Badge, halb eingeführtes Feature), fliegt raus. Der Zwischenzustand („Feature halb drin") ist die schlechteste Variante: ganz rein oder ganz raus.
  • Die fertige Tabelle ist das Vertragsdokument der Umsetzung — bei Sessionwechsel oder Übergabe reicht sie, um mechanisch fortzusetzen.

Phase 2 — Umsetzung: abschnittsweise committen, am Ende pushen

  1. Auf der Basis einen echten Merge beginnen: git merge <gegenseite> (bewusst KEIN -X ours/theirs — die Konflikte sind gewollt sichtbar).
  2. Konflikte Abschnitt für Abschnitt exakt nach Tabelle lösen.
  3. Pro logischem Abschnitt ein Commit (bzw. bei einem einzigen Merge-Commit: pro Abschnitt ein dokumentierter Lösungsschritt in der Commit-Message). Jede Commit-Message nennt das Tabellen-Verdikt („overrides: Gegenseite + vitest auf Basis-Stand gehoben"). So bleibt jeder Reißverschluss-Zahn einzeln nachvollziehbar und revertierbar.
  4. Tests nach der Umsetzung (Suite, Build, Installierbarkeit) — erst grün, dann weiter.
  5. Erst am Ende pushen — der lokale Verlauf darf während des Verfahrens umgebaut werden, der Remote sieht nur das fertige Ergebnis.
  6. Divergenz schließen ohne Löschen: den unterlegenen Branch per Fast-Forward auf das Ergebnis setzen (git checkout <gegenseite> && git merge --ff-only <basis>). Beide Namen zeigen danach auf denselben Stand; keine Historie geht verloren.

Eskalationspfad — Rebuild statt Merge (letzte Stufe)

Wenn der Reißverschluss nicht mehr greift, wird nicht gemerged, sondern neu gebaut: Man destilliert die Absicht/Funktionalität des Branches/PRs (WAS wollte er erreichen — nicht WIE) und implementiert sie frisch auf dem aktuellen Stand. Der alte Branch/PR wird mit Verweis auf den Neubau geschlossen.

Auslöser für die Eskalation (einer genügt):

  • Die Gegenseite ist nachweislich defekt (z. B. nie installierbar gewesen, Build bricht ab) — dann gab es nie einen funktionierenden Stand zu mergen.
  • Konfliktmasse ≫ Substanz: Die Änderung ist klein, aber über hunderte verschobene Zeilen verschmiert (Rename-/Format-Wellen dazwischen).
  • Die Historie ist vergiftet (z. B. dieselbe Versionsnummer auf beiden Seiten für unterschiedliche Inhalte vergeben — ein Merge würde die Lüge erben).
  • Der PR ist so alt, dass sein Kontext (APIs, Struktur) nicht mehr existiert.

Vorgehen: Absicht in 2–5 Sätzen festhalten (aus PR-Beschreibung, Commits, Diff-Substanz) → auf aktuellem Stand neu implementieren → Tests → im alten PR/Branch dokumentieren, WAS übernommen wurde und WAS bewusst nicht, dann schließen. Urheberschaft der Idee im Commit/PR-Text nennen.

Fallstricke (aus der Ursprungs-Session, teuer bezahlt)

  • Doppelter [Unreleased]-Changelog-Block ist der häufigste Hotspot bei parallel gepflegten Branches — immer vereinigen, nie einen still verwerfen.
  • Beide Seiten vergeben dieselbe Versionsnummer für verschiedene Inhalte: vor dem Merge klären, welche Nummer die Registry kennt; die andere Seite bekommt im vereinigten Changelog eine Korrektur.
  • Ein Merge ist eine Audit-Gelegenheit: Beim abschnittsweisen Lesen fallen Dinge auf, die keiner der Branches sah (offene Advisories, tote Links, inkonsistente Pins). Funde mitnehmen, aber als eigene Commits — nicht mit den Reißverschluss-Entscheidungen vermengen.
  • Übernahme „weil neuer": Datum ist kein Argument. Jede Übernahme braucht einen prüfbaren Grund.
  • Force-Push-Reflex: Das Verfahren kommt ohne Force-Push aus (Merge + Fast-Forward). Wenn ein Force nötig scheint, ist meist die Basiswahl falsch.

Red Flags

GedankeRealität
„Ich nehme einfach die neuere Seite"Datum ≠ Qualität. Tabelle bauen.
„Die Konflikte löse ich in einem Rutsch"Ein Sammel-Commit macht jede Einzelentscheidung unrevidierbar.
„Push ich schon mal zwischendurch"Halbfertige Reißverschlüsse auf dem Remote verwirren jeden Mitleser. Push erst am Ende.
„Mergen geht immer irgendwie"Bei defekter Gegenseite oder vergifteter Historie ist Rebuild ehrlicher und schneller.
„Die Tabelle ist Overkill"Ohne Tabelle ist nach der dritten Datei vergessen, warum Abschnitt 1 so entschieden wurde.

Verwandte Skills

  • bugfix-protocol — wenn der Merge einen echten Defekt aufdeckt, dort weiter.
  • skill-extractor — Herkunft dieses Skills (Live-Session-Destillat).
  • human-loop-audit — teilt sich nur das Reißverschluss-Bild, hat aber mit Git-Merges nichts zu tun (interaktives App-/GUI-Testverfahren mit dem Nutzer).

Changelog

1.0.0 (2026-08-07)

  • Initiale Version. Extrahiert aus einer Live-Merge-Session vom 2026-08-06 (main/master-Vereinigung mehrerer Repos mit Entscheidungstabelle, Fund einer nie installierbaren Gegenseite, Fast-Forward-Abschluss; Eskalationsfall „Absicht übernehmen, neu bauen").

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Akademisches Studien- und Fristenmanagement mit Quellenprüfung, Datenschutz und realistischer Handlungsplanung.

日本語の概要は準備中です。原文の説明を表示しています。

ellmos-ai/skills82026年10月12日 更新

Aktives Lernen, Erarbeitung von Fachinhalten und strukturierte Erstellung von Synthesen.

日本語の概要は準備中です。原文の説明を表示しています。

ellmos-ai/skills82026年10月12日 更新

Prüfungsvorbereitung, Selbsttests, Probeklausuren und systematische Fehleranalyse.

日本語の概要は準備中です。原文の説明を表示しています。

ellmos-ai/skills82026年10月12日 更新

Terapia de Aceptación y Compromiso (ACT) según Steven Hayes: modelo Hexaflex con los seis procesos nucleares de la flexibilidad psicológica.

日本語の概要は準備中です。原文の説明を表示しています。

ellmos-ai/skills82026年10月12日 更新

Acceptance & Commitment Therapy (ACT) nach Steven Hayes: Hexaflex-Modell mit den sechs Kernprozessen psychischer Flexibilität.

日本語の概要は準備中です。原文の説明を表示しています。

ellmos-ai/skills82026年10月12日 更新

Acceptance & Commitment Therapy (ACT) according to Steven Hayes: Hexaflex model with the six core processes of psychological flexibility.

日本語の概要は準備中です。原文の説明を表示しています。

ellmos-ai/skills82026年10月12日 更新

ellmos-ai のスキルをすべて見る

このスキルの問題を報告する