Claude Code Masterkurs – KI-gestuetztes Programmieren lernen mit Anthropics Coding-Agent

gh - GitHub CLI für Terminal-Workflows

Tool-Lektion | 30 Minuten

Für Git/GitHub-Arbeit musst du ständig zwischen Terminal und Browser wechseln:

Lernziele

gh - GitHub CLI für Terminal-Workflows

🚀 Claude Code Relevanz: gh ist der Game-Changer fuer Claude Code Workflows - du erstellst Pull Requests, reviewst Code und managst Issues direkt aus dem Terminal, ohne jemals deinen Entwicklungs-Flow zu unterbrechen.

Berechtigung - Warum gh?

Das Problem mit GitHub Web-UI

Für Git/GitHub-Arbeit musst du ständig zwischen Terminal und Browser wechseln:

Beispiel: Pull Request erstellen = 10+ Clicks im Browser (3 Minuten)

Die Lösung: gh

gh ist die offizielle GitHub CLI - alles aus dem Terminal:

Ergebnis: Du bleibst im Terminal-Flow und sparst 60%+ Zeit bei GitHub-Tasks.

Zwecke - Wofür du gh einsetzt

. **Pull Requests erstellen und managen**

Pull Requests sind das Herzstuck des GitHub-Workflows, aber das Erstellen ueber die Web-UI erfordert mindestens 10 Klicks und einen Browser-Wechsel. Mit gh erledigst du den gesamten PR-Lifecycle in einem einzigen Terminal: erstellen, auflisten, anzeigen, reviewen und mergen. Das spart nicht nur Zeit, sondern unterbricht auch nicht deinen Entwicklungs-Flow. Stell dir vor, du hast ein Feature fertig implementiert und willst sofort einen PR erstellen - statt zum Browser zu wechseln, tippst du einen Befehl und der PR ist in 10 Sekunden erstellt. Das Ergebnis ist ein vollstaendiger PR-Workflow ohne den Terminal zu verlassen.

gh pr create --title "Feature X" --body "Description"
gh pr list
gh pr view 42
gh pr merge 42

. **Issues erstellen und tracken**

Wenn du beim Entwickeln einen Bug findest, willst du ihn sofort dokumentieren bevor du ihn vergisst. Mit gh erstellst du Issues direkt aus dem Terminal, ohne deinen Coding-Flow fuer einen Browser-Wechsel zu unterbrechen. Du kannst Labels zuweisen, dich selbst als Assignee setzen und den Issue gleich mit einem Branch verlinken. Stell dir vor, du stoeßt beim Testen auf einen Login-Bug und willst ihn festhalten - ein einziger Befehl genuegt und der Issue ist erstellt. Mit --assignee @me filterst du die Issue-Liste auf die dir zugewiesenen Aufgaben, was den Ueberblick in grossen Projekten erleichtert.

gh issue create --title "Bug: Login fails"
gh issue list --assignee @me
gh issue close 15

. **Code Review durchfuehren**

Code Reviews ueber die GitHub Web-UI bedeuten staendiges Hin- und Herwechseln zwischen Browser und Terminal, wenn du den Code lokal testen willst. Mit gh checkst du den PR-Branch direkt aus, siehst den Diff im Terminal und gibst dein Review ab - alles ohne den Browser. Stell dir vor, du bist Reviewer fuer einen PR und willst den Code lokal ausfuehren bevor du ihn approvest - gh pr checkout holt den Branch, gh pr diff zeigt die Aenderungen, und gh pr review --approve gibt dein Okay. Dieser Workflow ist besonders effizient wenn du mehrere PRs hintereinander reviewen musst.

gh pr checkout 42
gh pr diff 42
gh pr review 42 --approve

. **Releases erstellen**

Releases auf GitHub manuell ueber die Web-UI zu erstellen ist muehsam: du musst den Tag auswaehlen, einen Titel eingeben, Release-Notes schreiben und optional Binaries hochladen. Mit gh erledigst du das in einem einzigen Befehl, inklusive automatischer Release-Notes-Generierung aus den Commit-Messages. Stell dir vor, du hast Version 1.0.0 fertig und willst sie veroeffentlichen - ein Befehl genuegt und der Release ist auf GitHub sichtbar mit allen Artifacts. Mit --generate-notes generiert gh automatisch eine Zusammenfassung der Aenderungen seit dem letzten Release. Das ist besonders wertvoll fuer Teams mit regelmaessigen Release-Zyklen.

gh release create v1.0.0 --notes "First release"

. **Repositories clonen und forken**

Mit gh ist das Klonen und Forken von Repositories noch einfacher als mit git clone, weil du keine vollstaendige URL eingeben musst - der Format user/repo genuegt. Beim Forken erstellt gh automatisch eine Kopie des Repositories in deinem GitHub-Account und kann es optional gleich lokal klonen. Stell dir vor, du findest ein interessantes Open-Source-Projekt und willst daran mitarbeiten - gh repo fork user/repo --clone forkt es und klont es in einem Schritt. Beim Klonen richtet gh auch die Git-Remote-URLs korrekt ein, sodass du sofort mit dem Pushen beginnen kannst. Das spart die manuelle Konfiguration der Origin- und Upstream-Remotes.

gh repo clone user/repo
gh repo fork user/repo

Verwendung - Wie du gh einsetzt

Installation

macOS (Homebrew): Auf macOS ist Homebrew der schnellste Installationsweg fuer gh. Das Paket wird vom GitHub-Team offiziell gepflegt und ist immer auf dem neuesten Stand. Nach der Installation musst du dich einmalig mit gh auth login bei GitHub authentifizieren (siehe Initial Setup). gh unterstuetzt sowohl HTTPS als auch SSH-Verbindungen. Pruefe mit gh --version ob die Installation erfolgreich war.

brew install gh

Ubuntu/Debian:

# Via APT
type -p curl >/dev/null || sudo apt install curl -y
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg
sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
sudo apt update
sudo apt install gh -y

Arch Linux: Auf Arch Linux heisst das Paket github-cli (nicht gh). Es ist im offiziellen Community-Repository verfuegbar und wird regelmaessig aktualisiert. Nach der Installation steht der Befehl gh (nicht github-cli) im Terminal zur Verfuegung. Vergiss nicht, dich nach der Installation mit gh auth login zu authentifizieren. Die Tab-Completion fuer zsh wird automatisch mit installiert.

sudo pacman -S github-cli

Windows (Scoop): Auf Windows installierst du gh am einfachsten ueber Scoop oder Chocolatey (choco install gh). Der Windows-Installer richtet gh automatisch im PATH ein. gh funktioniert in PowerShell, Windows Terminal und auch in der Git Bash. Nach der Installation authentifiziere dich mit gh auth login - der interaktive Login oeffnet deinen Browser fuer die Autorisierung. Fuer die beste Erfahrung nutze das Windows Terminal.

scoop install gh

Initial Setup (Authentication)

Erste Verwendung: Bevor du gh nutzen kannst, musst du dich einmalig bei GitHub authentifizieren. Der interaktive Login-Prozess fragt dich ob du GitHub.com oder eine Enterprise-Instanz nutzt, ob du HTTPS oder SSH bevorzugst, und wie du dich authentifizieren willst. Die einfachste Option ist die Browser-Authentifizierung: gh oeffnet deinen Browser, du loggst dich bei GitHub ein und autorisierst die CLI-App. Stell dir vor, du installierst gh zum ersten Mal - nach dem Login sind alle Befehle sofort einsatzbereit ohne weitere Konfiguration. Den Status deiner Authentifizierung pruefst du jederzeit mit gh auth status.

# Interaktives Login
gh auth login

# Prompts:
# - GitHub.com oder GitHub Enterprise?
# - HTTPS oder SSH?
# - Authenticate via: Web browser oder Token?

# Status checken
gh auth status

Ergebnis: Du bist eingeloggt und kannst alle GitHub-Operations durchführen.

Quick Start (30 Sekunden)

Basis-Commands:

# Repo clonen
gh repo clone user/repo

# Issue erstellen
gh issue create

# PR erstellen
gh pr create

# PRs anzeigen
gh pr list

# Status checken
gh status

Wichtigste Befehle:

# gh repo   - Repository operations
# gh pr     - Pull Request operations
# gh issue  - Issue operations
# gh gist   - Gist operations
# gh release - Release operations
# gh workflow - GitHub Actions workflows

Advanced Usage

1. Pull Request Workflow (komplett):

# 1. Neuer Branch + Code-Änderungen
git checkout -b feature/auth
# ... code changes ...
git add .
git commit -m "Add authentication"
git push -u origin feature/auth

# 2. PR erstellen (interaktiv)
gh pr create
# → Title? (enter)
# → Body? (enter)
# → Base branch? (main)

# 3. Oder: Mit Flags (schnell)
gh pr create --title "Add authentication" \
  --body "Implements JWT auth" \
  --base main \
  --head feature/auth

# 4. PR-Status checken
gh pr status

# 5. PR reviewen (als Reviewer)
gh pr checkout 42
gh pr diff 42
gh pr review 42 --approve --body "LGTM!"

# 6. PR mergen
gh pr merge 42 --squash --delete-branch

2. Issues Management:

# Issue erstellen (interaktiv)
gh issue create

# Mit Flags
gh issue create \
  --title "Bug: Login fails" \
  --body "Steps to reproduce: ..." \
  --label bug \
  --assignee @me

# Issues listen
gh issue list
gh issue list --state open
gh issue list --assignee @me
gh issue list --label bug

# Issue anzeigen
gh issue view 15
gh issue view 15 --web  # Im Browser öffnen

# Issue bearbeiten
gh issue edit 15 --add-label "priority:high"
gh issue close 15

3. Repository Operations:

# Repo erstellen
gh repo create my-new-project --public

# Mit Template
gh repo create my-app --template user/template-repo

# Repo klonen (schnell)
gh repo clone user/repo

# Repo forken
gh repo fork user/repo --clone

# Repo-Info anzeigen
gh repo view
gh repo view user/repo

4. Code Review Workflow:

# Alle offenen PRs anzeigen
gh pr list

# PR checkouten (lokal testen)
gh pr checkout 42

# Diff anzeigen
gh pr diff 42

# Kommentare anzeigen
gh pr view 42 --comments

# Review abgeben
gh pr review 42 --approve
gh pr review 42 --request-changes --body "Needs tests"
gh pr review 42 --comment --body "Question about line 42"

# PR mergen (verschiedene Strategien)
gh pr merge 42 --merge     # Normal merge
gh pr merge 42 --squash    # Squash commits
gh pr merge 42 --rebase    # Rebase merge
gh pr merge 42 --auto      # Auto-merge when checks pass

5. Releases Management:

# Release erstellen
gh release create v1.0.0 \
  --title "Version 1.0.0" \
  --notes "First stable release"

# Mit Artifacts
gh release create v1.0.0 dist/*.zip \
  --notes "Download binaries below"

# Release-Notes aus Datei
gh release create v1.0.0 --notes-file CHANGELOG.md

# Releases listen
gh release list

# Release anzeigen
gh release view v1.0.0

# Release löschen
gh release delete v1.0.0

6. GitHub Actions:

# Workflows listen
gh workflow list

# Workflow-Runs anzeigen
gh run list

# Bestimmten Run anzeigen
gh run view 123456

# Logs anzeigen
gh run view 123456 --log

# Workflow manuell triggern
gh workflow run build.yml

7. Gists:

# Gist erstellen
gh gist create file.txt

# Mehrere Files
gh gist create file1.txt file2.js --public

# Gists listen
gh gist list

# Gist anzeigen
gh gist view abc123

Best Practices

. **Aliases für häufige Commands**

# In ~/.bashrc oder ~/.zshrc
alias prc='gh pr create'
alias prl='gh pr list'
alias prv='gh pr view'
alias prs='gh pr status'
alias ic='gh issue create'
alias il='gh issue list'

. **Default Settings konfigurieren**

# Editor setzen (für PR/Issue Bodies)
gh config set editor vim

# Default Protokoll (HTTPS vs SSH)
gh config set git_protocol https

# Pager deaktivieren (wenn du less nicht magst)
gh config set pager cat

. **Kombination mit git aliases**

# In ~/.gitconfig
[alias]
  pc = !git push && gh pr create
  prs = !gh pr status

# Nutzen:
git pc  # Push + PR erstellen in einem

. **Interactive Mode nutzen**

# Flags weglassen → Interaktive Prompts
gh pr create
gh issue create

# Schneller als Flags tippen bei komplexen Inputs

. **Fuzzy Search mit fzf**

# Install fzf first
brew install fzf

# PR checkouten (fuzzy)
gh pr list | fzf | awk '{print $1}' | xargs gh pr checkout

# Als Function:
fpr() {
  gh pr list | fzf | awk '{print $1}' | xargs gh pr checkout
}

. **Batch Operations mit Scripts**

# Alle offenen Issues einem Milestone zuweisen
gh issue list --state open --json number --jq '.[].number' | \
  xargs -I {} gh issue edit {} --milestone "v1.0"

# Alle stale PRs schließen
gh pr list --state open --json number,updatedAt --jq \
  '.[] | select(.updatedAt < "2025-01-01") | .number' | \
  xargs -I {} gh pr close {}

. **Claude Code Workflows**

# Nach Feature-Development: Direkt PR
git add . && git commit -m "feat: ..." && git push
gh pr create --fill  # Nutzt Commit-Message als Body

# Während Code-Review: Checkout + Test
gh pr checkout 42
npm test
gh pr review 42 --approve

# Release nach Merge
gh release create v1.2.0 --generate-notes

Beispiele - Real-World Use-Cases

Beispiel 1: Feature-Development → PR in 2 Minuten

Szenario: Du hast Feature entwickelt, willst PR erstellen.

# 1. Änderungen committen
git checkout -b feature/dark-mode
# ... code changes ...
git add .
git commit -m "feat: Add dark mode toggle"

# 2. Pushen
git push -u origin feature/dark-mode

# 3. PR erstellen (alles in einem)
gh pr create \
  --title "Add dark mode toggle" \
  --body "Implements dark mode with toggle button. Fixes #42" \
  --base main \
  --reviewer @teammate \
  --label feature

# Output:
# ✓ Created pull request #123
# https://github.com/user/repo/pull/123

# 4. Status checken
gh pr status

# Output:
# Current branch
#   #123  Add dark mode toggle [feature/dark-mode]
#   - Checks passing
#   - Review pending

Zeit gespart: 2 Minuten vs. 5 Minuten im Web-UI

Beispiel 2: Bulk-Issue-Triage

Szenario: 50 offene Issues, du willst Labels zuweisen.

# 1. Alle Bug-Issues finden
gh issue list --search "is:open bug" --json number,title

# 2. Labels zuweisen (Batch)
gh issue list --search "is:open bug" --json number --jq '.[].number' | \
  xargs -I {} gh issue edit {} --add-label "priority:high"

# 3. Bestimmte Issues einem Milestone zuweisen
gh issue list --label "feature" --json number --jq '.[].number' | \
  xargs -I {} gh issue edit {} --milestone "v2.0"

# 4. Alte Issues schließen
gh issue list --json number,createdAt --jq \
  '.[] | select(.createdAt < "2024-01-01") | .number' | \
  xargs -I {} gh issue close {} --comment "Closing stale issue"

Produktivität: 50 Issues in 1 Minute vs. 30 Minuten manuell

Beispiel 3: Code-Review-Session

Szenario: Du bist Reviewer, 5 PRs warten auf dich.

# 1. Alle PRs anzeigen die Review brauchen
gh pr list --search "review-requested:@me"

# Output:
# #125  Add user authentication     feature/auth
# #124  Fix memory leak              bugfix/memory
# #123  Update dependencies          chore/deps

# 2. PR checkouten (lokal testen)
gh pr checkout 125

# 3. Code anschauen
gh pr diff 125 | bat

# 4. Tests laufen lassen
npm test

# 5. Review abgeben
gh pr review 125 --approve --body "✅ Looks good! Tests pass."

# 6. Nächster PR
gh pr checkout 124
npm test
gh pr review 124 --request-changes --body "Memory leak still present. See line 42."

# 7. Letzter PR (schnell approven)
gh pr review 123 --approve

Zeit gespart: 15 Minuten vs. 30 Minuten im Web-UI

Beispiel 4: Release-Workflow

Szenario: Version 1.2.0 ready, willst Release erstellen.

# 1. Letzte Änderungen mergen
gh pr merge 125 --squash

# 2. Tag erstellen (lokal)
git tag v1.2.0
git push --tags

# 3. Build erstellen
npm run build
# → dist/ folder mit Artifacts

# 4. Release erstellen mit Assets
gh release create v1.2.0 \
  dist/*.zip \
  --title "Version 1.2.0" \
  --notes "## What's New
- Dark mode toggle
- Performance improvements
- Bug fixes

## Installation
Download the binary for your platform below."

# Output:
# ✓ Created release v1.2.0
# https://github.com/user/repo/releases/tag/v1.2.0

# 5. Release-Notes anpassen (falls nötig)
gh release view v1.2.0 --web
# → Edit in Browser

Resultat: Release in 5 Minuten vs. 15 Minuten manuell

Beispiel 5: Issue-Driven Development

Szenario: Bug gefunden während Development, sofort Issue erstellen.

# 1. Mitten im Coding: Bug entdeckt
# (du bist in src/auth.js)

# 2. Issue erstellen (interaktiv)
gh issue create

# Prompts:
# Title? > Login fails with special characters
# Body? > When username contains @ or #, login throws error
# Submit? > Yes

# Output:
# ✓ Created issue #126
# https://github.com/user/repo/issues/126

# 3. Direkt Branch erstellen + verlinken
git checkout -b fix/issue-126-login-special-chars

# 4. Fix implementieren
# ... code changes ...
git commit -m "fix: Handle special chars in username. Closes #126"

# 5. PR mit Issue-Link
gh pr create --fill
# → Commit-Message wird als Body genutzt
# → "Closes #126" verlinkt automatisch

Vorteil: Keine Unterbrechung im Flow, Issue + Fix in einem Workflow

Beispiel 6: Multi-Repo Automation

Szenario: Du maintainest 10 Repos, willst überall Security-Issue fixen.

# 1. Script erstellen
cat > update-deps.sh << 'EOF'
#!/bin/bash
REPOS=(
  "user/repo1"
  "user/repo2"
  "user/repo3"
)

for repo in "${REPOS[@]}"; do
  echo "Processing $repo..."

  # Clone
  gh repo clone "$repo" /tmp/"$(basename $repo)"
  cd /tmp/"$(basename $repo)"

  # Update Dependencies
  npm update --save
  npm audit fix

  # Commit + Push
  git checkout -b security/update-deps
  git add package.json package-lock.json
  git commit -m "chore: Update dependencies (security)"
  git push -u origin security/update-deps

  # Create PR
  gh pr create \
    --title "Security: Update dependencies" \
    --body "Automated dependency update" \
    --label security

  cd -
done
EOF

# 2. Ausführen
chmod +x update-deps.sh
./update-deps.sh

# Ergebnis: 10 PRs in 10 Minuten erstellt

Produktivität: 10 PRs automatisch vs. 2 Stunden manuell

Claude Code Integration

Workflow 1: PR erstellen nach Claude Code Feature

# Claude Code Session: gh fuer GitHub-Workflow
gh pr create --title "Feature: Add user auth" --body "Implemented by Claude Code"

Workflow 2: Issues als Context laden

gh issue view 42 --json title,body,comments

Workflow 3: CI-Status nach Push pruefen

gh run list --limit 5 && gh run view
💡 Tipp: Claude Code kann gh direkt nutzen um PRs zu erstellen, Issues zu lesen und CI-Status zu pruefen.

Video-Tutorial

[GitHub CLI - Quickstart Guide (GitHub Docs)](https://docs.github.com/en/github-cli/github-cli/quickstart) Offizieller Quickstart-Guide von GitHub mit Schritt-fuer-Schritt-Anleitung zur Installation, Authentifizierung und den wichtigsten Befehlen fuer Pull Requests, Issues und mehr.

Troubleshooting

Problem: "gh: command not found"

# Check Installation
which gh

# Wenn nicht gefunden: Installieren
# macOS
brew install gh

# Ubuntu
# (siehe Installation oben)

# Path checken
echo $PATH

Problem: "Not authenticated"

# Status checken
gh auth status

# Output:
# ✗ Not logged into any GitHub hosts

# Login durchführen
gh auth login

# Oder: Mit Token
gh auth login --with-token < token.txt

Problem: "Permission denied" beim PR erstellen

# Check: Hast du Write-Access?
gh repo view

# Wenn Fork: Nutze Fork-PR-Workflow
gh repo fork original/repo --clone
cd repo
# ... changes ...
gh pr create --repo original/repo

Problem: "No pull requests found" obwohl PRs existieren

# Check: Bist du im richtigen Repo?
git remote -v

# Check: Default Branch korrekt?
gh repo view | grep "default branch"

# Manuell Repo angeben
gh pr list --repo user/repo

gh vs. git vs. GitHub Web - Der Vergleich

| Feature | git | gh | GitHub Web |\n|---------|-------|------|------------|\n| Lokale Git-Ops | ✅ Primär | ⚠️ Limitiert | ❌ |\n| GitHub-Features | ❌ | ✅ Vollständig | ✅ Vollständig |\n| PRs erstellen | ❌ | ✅ 1 Command | ⚠️ 10+ Clicks |\n| Code-Review | ❌ | ✅ Terminal | ⚠️ Web |\n| Scriptable | ✅ | ✅ | ❌ |\n| Bulk-Operations | ⚠️ Limited | ✅ | ❌ |\n| Speed | 🚀 | 🚀 | 🐌 |\n| Context Switching | ✅ None | ✅ None | ❌ Terminal↔Browser |\n

Fazit:

Workflow: git + gh = 100% Terminal-basiert

Weiterführende Links

Offizielle Ressourcen

Community

Tutorials

Extensions

Pro-Tipps

. **gh + fzf Integration**

# In ~/.zshrc
# Fuzzy-PR-Checkout
fpr() {
  gh pr list | fzf --preview 'gh pr view {1}' | awk '{print $1}' | xargs gh pr checkout
}

# Fuzzy-Issue-View
fissue() {
  gh issue list | fzf --preview 'gh issue view {1}' | awk '{print $1}' | xargs gh issue view
}

. **gh als git Subcommand**

# gh ist auch als git-Subcommand nutzbar:
git pr create  # = gh pr create
git issue list # = gh issue list

# In ~/.gitconfig:
[alias]
  prc = pr create
  prl = pr list

. **Extensions installieren**

# Dashboard für besseren Überblick
gh extension install dlvhdr/gh-dash

# Nutzen:
gh dash  # Interaktives Dashboard

. **JSON Output für Scripting**

# Alle PRs als JSON
gh pr list --json number,title,state

# Filtern mit jq
gh pr list --json number,title,state | jq '.[] | select(.state == "OPEN")'

# Als CSV
gh pr list --json number,title,author --jq '.[] | [.number, .title, .author.login] | @csv'

. **Auto-Completion**

# Zsh
gh completion -s zsh > /usr/local/share/zsh/site-functions/_gh

# Bash
gh completion -s bash > /etc/bash_completion.d/gh

# Dann: gh pr <TAB> zeigt alle Subcommands

Zusammenfassung

gh ist dein GitHub-Interface im Terminal - schneller, scriptable, fokussiert.

Quick Wins:

Installation: 5 Minuten Learning Curve: 10 Minuten Produktivität: +60% bei GitHub-Arbeit