+190 XP

End to end: vom Issue zum gemergten Pull Request

# End to end: vom Issue zum gemergten Pull Request

Ein GitHub-Issue aufgreifen, Gemini CLI einen Branch anlegen, die Änderung implementieren und testen lassen, einen Pull Request eröffnen, den Diff selbst reviewen und mergen: Das ist der vollständige professionelle Loop, und Gemini passt hinein, ohne dass Sie die Kontrolle über eines der Gates abgeben.

Sie kennen Gemini CLI bereits als agentisches Coding-Tool, das in Ihrem Terminal läuft. Diese Lektion verdrahtet es mit einem echten GitHub-Prozess. Es geht nicht darum, „die KI Code schreiben zu lassen“. Es geht darum, Gemini CLI als schnellen, unermüdlichen Contributor zu behandeln, dessen Arbeit dieselbe Review-Disziplin durchläuft, die Sie bei jedem Junior Engineer anwenden würden.

Der Loop, den wir automatisieren

Ein ausgereifter GitHub-Workflow sieht so aus:

1. Ein Issue beschreibt ein Problem oder ein Feature.

2. Jemand branched von main ab.

3. Er implementiert eine kleine, fokussierte Änderung mit Tests.

4. Er eröffnet einen Pull Request (PR).

5. Ein Mensch reviewt den Diff.

6. CI läuft grün, dann mergt jemand.

Gemini CLI kann die Schritte 2 bis 4 für Sie übernehmen. Schritte 5 und 6 bleiben menschlich. Diese Trennung ist das ganze Design: Das Modell erzeugt einen Vorschlag, und der PR ist das Artefakt, das Sie prüfen, bevor irgendetwas main berührt.

Setup: GitHub-Kontext für die CLI

Gemini CLI kann direkt git und die GitHub CLI (gh) aufrufen, und genau so liest es Issues und eröffnet PRs. Stellen Sie sicher, dass beide installiert und authentifiziert sind:

bash
gh auth status          # confirm you are logged in to GitHub
gh auth setup-git       # let gh act as git's credential helper
gemini --version        # confirm Gemini CLI is on your PATH

Der entscheidende Schritt ist, der CLI ein Projekt-Briefing zu geben, damit sie Ihre Konventionen nicht errät. Gemini CLI liest eine GEMINI.md-Datei im Repo-Root als persistenten Kontext für jede Session. Behandeln Sie sie wie einen Vertrag:

markdown
# Project: billing-service

## Workflow rules
- Branch from `main` using `fix/<issue-number>-<slug>` or `feat/<issue-number>-<slug>`.
- One logical change per branch. Keep diffs small.
- Every code change needs a matching test.
- Run `pytest -q` before proposing a PR. Do not open a PR if tests fail.

## Conventions
- Python 3.12, formatted with `ruff format`.
- Conventional Commits for commit messages (`fix:`, `feat:`, `chore:`).
- Never touch `migrations/` without an explicit instruction.

Die letzte Zeile ist wichtig. In GEMINI.md kodieren Sie Guardrails, nicht nur Stil. Alles, was Sie einem neuen Mitarbeiter in der ersten Woche sagen würden, gehört hierher.

Schritt 1: Das Issue aufgreifen

Nehmen wir an, Issue #212 lautet: *„Refund-Endpoint gibt 200 zurück, auch wenn die Payment-ID unbekannt ist; er sollte 404 zurückgeben.“*

Starten Sie eine Session und geben Sie dem Modell das Issue über die Nummer. Gemini CLI kann gh issue view selbst aufrufen, Sie müssen den Text also nicht einfügen:

bash
gemini
> Read issue #212 with `gh issue view 212`, then summarize the bug and
  the acceptance criteria before writing any code.

Zuerst eine Zusammenfassung zu erzwingen, ist eine bewusste Technik. Das Modell soll das Problem in eigenen Worten wiedergeben, damit Sie ein Missverständnis erkennen, bevor es eine Zeile schreibt. Ist die Zusammenfassung falsch, korrigieren Sie sie jetzt. Das kostet zehn Sekunden und erspart Ihnen einen schlechten Diff.

Schritt 2: Branchen mit Hygiene

Sobald die Zusammenfassung stimmt, lassen Sie die CLI branchen. Da GEMINI.md die Namensregel definiert hat, können Sie knapp bleiben:

bash
> Create the working branch for this issue following the rules in GEMINI.md.

Gemini CLI führt dann etwa git checkout -b fix/212-refund-unknown-payment-404 aus. Branch-Hygiene heißt: Ein Branch entspricht einem Issue und einer logischen Änderung. Das ist keine Bürokratie. Es ist der Grund, warum der resultierende Diff klein genug bleibt, dass ein Mensch ihn tatsächlich lesen kann, und es erlaubt Ihnen, einen schlechten Versuch mit einem einzigen git branch -D zu verwerfen, statt vermischte Änderungen zu entwirren.

Wenn die CLI jemals direkt auf main arbeiten will, stoppen Sie sie. Auf main zu arbeiten ist der mit Abstand häufigste Weg, auf dem ein Agent stillschweigend ein Repo beschädigt.

Schritt 3: Implementieren und testen

Jetzt die eigentliche Arbeit. Gemini CLI ist agentisch: Es liest Dateien, schlägt Edits vor und fragt, ob es Befehle ausführen darf. Geben Sie diese Aktionen bewusst frei.

bash
> Fix issue #212. Locate the refund handler, return 404 when the payment
  ID is not found, and add a test that fails on the old behavior.
  Run `pytest -q` when done and show me the result.

Zwei Dinge, auf denen Sie hier bestehen sollten:

Tests sind Teil der Änderung, nicht ein Nachtrag. Eine Änderung ohne Test ist eine Änderung, bei der niemand darauf vertrauen kann, dass sie behoben bleibt. Die Anweisung oben verlangt einen Test, der *beim alten Verhalten fehlschlägt*, und genau so beweisen Sie, dass der Test echt ist und kein Feigenblatt.

Das Modell führt die Tests aus, und Sie lesen die Ausgabe. Akzeptieren Sie kein „Ich habe den Fix hinzugefügt“ auf Vertrauensbasis. Wenn pytest rot ist, ist der Loop nicht fertig. Schicken Sie den Fehler zurück:

bash
> pytest failed with `KeyError: 'payment_id'` in test_refund.py:41.
  Fix the test setup, do not change the assertion.

Der letzte Teilsatz schützt Sie vor einem klassischen Fehlermodus: Das Modell „repariert“ einen roten Test, indem es die Assertion abschwächt, bis sie durchläuft. Sie entscheiden, was der Test beweisen soll.

Schritt 4: Den Diff lokal reviewen, dann den PR eröffnen

Bevor es überhaupt einen PR gibt, sehen Sie sich den rohen Diff selbst an:

bash
> Show me `git diff --stat`, then the full diff.

--stat zuerst gibt Ihnen die Form der Änderung: welche Dateien, wie viele Zeilen. Wenn das Modell zwölf Dateien angefasst hat, um einen 404 zu fixen, stimmt etwas nicht. Ein knapper, themenbezogener Diff ist ein Signal, dass das Modell die Aufgabe verstanden hat. Ein ausuferndes Signal heißt: zurücksetzen.

Wenn der Diff sauber ist, lassen Sie die CLI committen und den PR eröffnen:

bash
> Commit with a Conventional Commit message, push the branch, and open a
  PR against `main` with `gh pr create`. In the PR body, link issue #212
  with "Closes #212" and summarize what changed and how you tested it.

Das Keyword Closes #212 ist nicht kosmetisch. GitHub schließt das verlinkte Issue automatisch, wenn der PR gemergt wird, und hält so Ihren Issue Tracker ehrlich. Ein guter, vom Modell geschriebener PR-Body gibt Ihrem menschlichen Reviewer (oder Ihrem zukünftigen Ich) den Kontext für ein schnelles Review.

Gemini CLI: Agentic coding in your terminal

Watch on YouTube

Schritt 5: Das menschliche Review ist das Gate

Hier kommt der Teil, der bewusst nicht automatisiert wird. Der PR liegt jetzt auf GitHub. Öffnen Sie ihn im Browser und reviewen Sie den Diff, als hätte ihn ein Fremder geschrieben, denn funktional war es so.

Stellen Sie die konkreten Fragen:

  • Passt der Fix zu den Akzeptanzkriterien aus Issue #212?
  • Testet der neue Test tatsächlich den Pfad mit unbekannter Payment-ID?
  • Hat sich etwas eingeschlichen, das das Issue nicht verlangt hat?
  • Gibt es Sicherheits- oder Datenimplikationen (Auth, Logging einer Payment-ID, eine Migration)?

Hier verdient sich auch ein zweiter KI-Reviewer seinen Platz. Gemini Code Assist kann Pull Requests auf GitHub reviewen und Inline-Kommentare am Diff hinterlassen. Im Repo installiert, kommentiert es automatisch, wenn ein PR eröffnet wird. Behandeln Sie das als ersten Durchgang, der offensichtliche Probleme aufdeckt (fehlende Edge Cases, Stilabweichungen), nicht als die Freigabe selbst. Auf „Approve“ klickt weiterhin der Mensch.

Der Grund, das Gate menschlich zu halten, ist Verantwortlichkeit. Wenn dieser Refund-Code live geht und um 2 Uhr nachts etwas kaputtgeht, ist „das Modell hat es freigegeben“ keine Antwort, die irgendjemand akzeptiert. Wer gemergt hat, verantwortet die Änderung. Gemini CLI hat sie entworfen; Sie haben sie ausgeliefert.

Wissenscheck

1. Warum bleiben im beschriebenen Workflow die Schritte 5 und 6 (Diff reviewen und mergen) bewusst menschlich, während Gemini CLI die Schritte 2 bis 4 übernimmt?

2. Was ist der primäre Zweck der Datei GEMINI.md im Repository-Root?

3. Die Lektion sagt, es gehe nicht darum, „die KI Code schreiben zu lassen“, sondern Gemini CLI als schnellen, unermüdlichen Contributor zu behandeln. Welches Kernprinzip drückt diese Sichtweise aus?

MEHRFACHAUSWAHL

4. Wählen Sie ALLE Aussagen, die korrekt beschreiben, wie Gemini CLI für die Arbeit im GitHub-Prozess eingerichtet wird.

Wählen Sie alle richtigen Antworten aus.

MEHRFACHAUSWAHL

5. Wählen Sie ALLE Guardrails oder Regeln, die die Beispiel-GEMINI.md als Teil des Workflow-Vertrags festlegt.

Wählen Sie alle richtigen Antworten aus.

Schritt 6: CI, dann mergen

Ihre Branch-Protection-Regeln auf main sollten grüne CI vor dem Merge verlangen. Das ist Standard-GitHub-Konfiguration und gilt für KI-geschriebene PRs genauso wie für menschliche. Nichts wird rot gemergt.

Wenn CI an etwas scheitert, das lokale Tests übersehen haben (ein Linter, ein Integrationstest, ein Type Check), geben Sie den Fehler in dieselbe CLI-Session zurück:

bash
> The `ruff check` step failed in CI on unused import in refund.py.
  Fix it and push to the same branch.

Der PR aktualisiert sich an derselben Stelle, CI läuft erneut. Sobald er grün ist und Sie freigegeben haben, mergen Sie:

bash
> Merge the PR with `gh pr merge --squash --delete-branch`.

--squash fasst die Zwischencommits des Modells zu einem sauberen Commit auf main zusammen, sodass Ihre History eine Änderung pro Issue zeigt statt einer Spur von „fix test“-Commits. --delete-branch schließt den Loop der Branch-Hygiene: Der Wegwerf-Branch ist weg, und Closes #212 erledigt das Issue.

Warum kleine Diffs das Ganze zum Funktionieren bringen

Jede Disziplin in dieser Lektion (ein Issue pro Branch, ein Test bei jeder Änderung, --stat vor dem vollen Diff ansehen, Squash-Merge) zielt auf dasselbe: die Änderungseinheit klein genug zu halten, dass ein Mensch sie in wenigen Minuten vollständig versteht.

Mit einem KI-Contributor zählt das mehr, nicht weniger. Gemini CLI erzeugt eine 600-zeilige Änderung so leicht wie eine mit 20 Zeilen, und ein langes Kontextfenster bedeutet, dass es sich bereitwillig an ausufernde Refactorings wagt. Der Engpass ist nicht die Fähigkeit des Modells, Code zu schreiben. Es ist Ihre Fähigkeit, ihn zu verifizieren. Kleine Diffs halten die Verifikation günstig, und das hält den Loop schnell und sicher.

Wenn Sie den Impuls verspüren zu sagen „und refactore gleich noch das ganze Payments-Modul“, widerstehen Sie ihm. Das ist ein zweites Issue und ein zweiter Branch.

Das Muster skalieren

Sobald dieser Loop in Muskelgedächtnis übergegangen ist, skaliert dieselbe Form nach oben:

  • Batch-Triage. Richten Sie die CLI auf eine Menge gelabelter Issues und lassen Sie sie PRs einen nach dem anderen entwerfen, jeder auf seinem eigenen Branch, jeder weiterhin durch Ihr Review gegated.
  • Eigene Automatisierung. Für wiederholbare, mehrstufige Workflows über ein einzelnes Repo hinaus können Sie mit dem Agent Development Kit (ADK) einen zweckgebauten Agenten bauen, während Gemini CLI Ihr interaktives Tool mit Human in the Loop bleibt.

Der interaktive Loop ist die Grundlage. Automatisieren Sie von dort nach außen erst, wenn Sie dem Gate vertrauen.

Key Takeaways

  • Kodieren Sie Ihre Regeln in `GEMINI.md`. Branch-Benennung, „eine Änderung pro Branch“, „jede Änderung braucht einen Test“ und Tabu-Verzeichnisse gehören ins Repo, damit jede Session sie erbt.
  • Lassen Sie das Modell das Issue zusammenfassen und die Tests laufen, bevor Sie irgendetwas glauben. Erkennen Sie Missverständnisse früh und akzeptieren Sie niemals einen grünen PR, dessen Diff Sie nicht gesehen haben.
  • Halten Sie den Menschen als Merge-Gate. Nutzen Sie Gemini Code Assist für ein erstes Review, aber wer auf Merge klickt, verantwortet die Änderung auf main.
  • Schützen Sie `main` mit Branch Protection und verlangen Sie grüne CI. KI-geschriebene PRs passieren dieselben automatisierten Gates wie menschliche, ohne Ausnahme.
  • Halten Sie Diffs klein. Erst git diff --stat reviewen, Squash-Merge, Branch löschen. Kleine Änderungseinheiten sind das, was die Arbeit mit einem KI-Contributor sicher macht.