Zum Inhalt springen
Git & GitHub AnfΓ€nger 20 min

Push & Pull

Lerne, wie du mit git push und git pull deinen Code zwischen Computer und GitHub synchronisierst.

Aktualisiert:

Push und Pull sind die Befehle, mit denen du deinen Code zwischen deinem Computer und GitHub hin- und herschickst. In diesem Kapitel lernst du beide Befehle gruendlich kennen - inklusive aller wichtigen Optionen und typischer Szenarien.

git push - Code hochladen

Der Grundbefehl

git push origin main

Das bedeutet: β€œSende meine Commits vom lokalen main-Branch zum Remote origin.”

Dein Computer              GitHub
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”               β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ C1-C2-C3 β”‚  ──push──→    β”‚ C1-C2-C3 β”‚
β”‚   main   β”‚               β”‚   main   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜               β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Erster Push mit Tracking

git push -u origin main

Das -u (oder --set-upstream) verknuepft deinen lokalen Branch mit dem Remote-Branch. Danach reicht ein einfaches:

git push

Einen Feature-Branch pushen

# Feature-Branch erstellen und bearbeiten
git switch -c feature/dark-mode
# ... Commits machen ...

# Zum ersten Mal pushen
git push -u origin feature/dark-mode
Total 3 (delta 1), reused 0 (delta 0)
remote: Create a pull request for 'feature/dark-mode' on GitHub by visiting:
remote:   https://github.com/dein-name/projekt/pull/new/feature/dark-mode
To https://github.com/dein-name/projekt.git
 * [new branch]      feature/dark-mode -> feature/dark-mode
Branch 'feature/dark-mode' set up to track remote branch 'feature/dark-mode' from 'origin'.

GitHub gibt dir sogar den Link fuer einen Pull Request!

Alle Branches pushen

git push --all origin

Tags pushen

# Einen einzelnen Tag
git push origin v1.0

# Alle Tags
git push origin --tags

git pull - Code herunterladen

Der Grundbefehl

git pull origin main

Das bedeutet: β€œHole die neuesten Commits vom Remote origin und merge sie in meinen lokalen main-Branch.”

GitHub                     Dein Computer
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”               β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ C1-C2-C3 β”‚  ──pull──→    β”‚ C1-C2-C3 β”‚
β”‚   main   β”‚               β”‚   main   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜               β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Mit Tracking (Kurzform)

git pull

Funktioniert, wenn der Upstream gesetzt ist.

Was pull intern macht

git pull ist eine Kombination aus zwei Befehlen:

# Das passiert intern:
git fetch origin        # Aenderungen herunterladen
git merge origin/main   # In lokalen Branch mergen

Pull mit Rebase

Statt zu mergen kannst du auch rebasen:

git pull --rebase origin main

Das erzeugt eine linearere Historie ohne Merge-Commits. Mehr dazu im Kapitel ueber Rebase.

Der taegliche Push-Pull-Workflow

Alleine arbeiten

# Morgens: Starten
git pull                    # Falls du auf einem anderen Geraet gearbeitet hast

# Arbeiten
git add .
git commit -m "feat: Neues Feature"

# Feierabend: Pushen
git push

Im Team arbeiten

# 1. Neuesten Stand holen
git switch main
git pull

# 2. Feature-Branch erstellen
git switch -c feature/suche

# 3. Arbeiten und committen
git add search.html
git commit -m "feat: Suchfunktion hinzugefuegt"

# 4. Vor dem Push: main-Updates holen
git switch main
git pull
git switch feature/suche
git merge main                # Aenderungen von main holen

# 5. Feature-Branch pushen
git push -u origin feature/suche

# 6. Pull Request auf GitHub erstellen

Haeufige Push-Probleme

Problem: β€œrejected - non-fast-forward”

git push
! [rejected]        main -> main (non-fast-forward)
error: failed to push some refs to 'origin'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g. 'git pull')

Ursache: Jemand anders hat in der Zwischenzeit gepusht.

Loesung:

git pull           # Neueste Aenderungen holen und mergen
# Eventuelle Konflikte loesen
git push           # Erneut pushen

Problem: β€œno upstream branch”

git push
fatal: The current branch feature/dark-mode has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin feature/dark-mode

Loesung:

git push -u origin feature/dark-mode

Problem: Push-Zugriff verweigert

remote: Permission to user/repo.git denied
fatal: unable to access 'https://github.com/user/repo.git/'

Moegliche Ursachen:

  • Du hast keinen Schreibzugriff auf das Repository
  • Deine Authentifizierung ist abgelaufen
  • Du versuchst, auf ein fremdes Repo zu pushen (nutze stattdessen Fork + Pull Request)

Haeufige Pull-Probleme

Problem: Merge-Konflikte beim Pull

git pull
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.

Loesung: Konflikte loesen wie bei einem normalen Merge:

# 1. Konflikte in der Datei loesen
# 2. Geloeste Dateien stagen
git add index.html
# 3. Merge-Commit erstellen
git commit -m "Merge: Remote-Aenderungen integriert"
# 4. Pushen
git push

Problem: Lokale Aenderungen wuerden ueberschrieben

git pull
error: Your local changes to the following files would be overwritten by merge:
        index.html

Loesung:

# Option 1: Erst committen
git add .
git commit -m "wip: Zwischenstand sichern"
git pull

# Option 2: Stashen
git stash
git pull
git stash pop

Push und Pull fuer Remote-Branches

Remote-Branch loeschen

# Remote-Branch auf GitHub loeschen
git push origin --delete feature/alte-funktion

Alle Remote-Branches aufraumen

# Geloeschte Remote-Branches lokal entfernen
git fetch --prune

Remote-Branch lokal auschecken

# Erst Remote-Infos aktualisieren
git fetch

# Dann den Branch auschecken
git switch feature/anderer-branch

Pull-Strategien konfigurieren

Standard-Pull-Verhalten festlegen

# Merge (Standard)
git config --global pull.rebase false

# Rebase
git config --global pull.rebase true

# Nur Fast-Forward (sicherste Option)
git config --global pull.ff only
StrategieBeschreibungEmpfehlung
mergeErzeugt Merge-CommitsStandard, einfach
rebaseLineare HistorieSauberere Historie
ff onlyNur wenn kein Merge noetigAm sichersten

Uebungen

  1. Pushe ein lokales Repository zu GitHub
  2. Klone es in einen zweiten Ordner
  3. Mache Aenderungen im zweiten Ordner und pushe sie
  4. Pulle die Aenderungen im ersten Ordner
  5. Erzeuge absichtlich einen Push-Konflikt und loese ihn

Was kommt als Naechstes?

Im naechsten Kapitel lernst du, wie du dein GitHub-Profil professionell gestaltest. Ein gutes GitHub-Profil ist wie ein Online-Lebenslauf fuer Entwickler.

Zusammenfassung

  • git push laedt deinen Code auf GitHub hoch
  • git pull holt Aenderungen von GitHub herunter und merged sie
  • git push -u setzt die Tracking-Beziehung (einmalig noetig)
  • Bei Push-Konflikten: Erst git pull, dann git push
  • git pull ist intern git fetch + git merge
  • git pull --rebase erzeugt eine sauberere Historie
  • Pushe regelmaessig, damit dein Code gesichert ist

Pro-Tipp: Mache es dir zur Gewohnheit, jeden Arbeitstag mit git pull zu beginnen und mit git push zu beenden. So ist dein Code immer gesichert und du arbeitest immer mit dem neuesten Stand. Falls du an mehreren Geraeten arbeitest, verhindert das auch Konflikte.

ZurΓΌck zum Git & GitHub Kurs