Appearance
Kapitel 4: Erweiterte Git-Befehle
4.1 Commit-Historie im Detail (git log erweitert)
📖 Einfache git log Optionen
bash
# Eine Zeile pro Commit
git log --oneline
# Die letzten 5 Commits
git log -5
# Mit Grafik (Branches anzeigen)
git log --graph --oneline --all
# Autor filtern
git log --author="Max"
# Nach Datum filtern
git log --since="2024-01-01" --until="2024-12-31"
# Suche in Commit-Nachrichten
git log --grep="Fix"🔹 Erweiterte Formatierung
bash
# Benutzerdefiniertes Format
git log --pretty=format:"%h - %an, %ar : %s"
# Ausgabe-Beispiel:
# a1b2c3d - Max Mustermann, vor 2 Tagen : Fix: Login-Fehler behobenFormat-Platzhalter:
| Platzhalter | Bedeutung |
|---|---|
%h | Kurzer Hash (abgekürzt) |
%H | Vollständiger Hash |
%an | Autorname |
%ar | Relative Zeit (z.B. "vor 2 Tagen") |
%s | Betreffzeile (Commit-Nachricht) |
🔹 Commits visualisieren (Git Graph)
bash
# Schöne Grafik aller Branches
git log --graph --oneline --decorate --all
# Ausgabe-Beispiel:
# * a1b2c3d (HEAD -> main) Feature: Login hinzugefügt
# | * e4f5g6h (feature-payment) Feature: Zahlung integriert
# |/
# * b7c8d9e Fix: Bug behobenTipp: Verwenden Sie ein Tool wie Git Graph (VS Code Extension) für eine noch bessere Visualisierung.
4.2 Änderungen rückgängig machen (Undo Operations)
📖 Verschiedene Rückgängig-Methoden
| Szenario | Befehl | Bereich |
|---|---|---|
| Arbeitsbereich-Änderungen verwerfen | git restore <datei> | Working Directory |
| Staging-Area-Änderungen verwerfen | git restore --staged <datei> | Staging Area |
| Letzten Commit ändern | git commit --amend | Letzter Commit |
| Alten Commit rückgängig machen | git revert <commit> | Beliebiger Commit |
| Commits löschen | git reset --hard <commit> | Repository (⚠️ Gefährlich) |
🔹 1. Arbeitsbereich-Änderungen rückgängig machen (git restore)
bash
# Änderungen in einer Datei verwerfen (Working Directory)
git restore index.html
# Alle Änderungen im Arbeitsbereich verwerfen
git restore .Erklärung:
- ✅ Die Datei wird auf den Stand des letzten Commits zurückgesetzt
- ✅ Änderungen gehen verloren
🔹 2. Staging-Area-Änderungen rückgängig machen (git restore --staged)
bash
# Datei aus der Staging Area entfernen (bleibt aber lokal erhalten)
git restore --staged index.html
# Alle Dateien aus der Staging Area entfernen
git restore --staged .Erklärung:
- ✅ Die Datei bleibt im Working Directory unverändert
- ✅ Sie wird nur aus der Staging area entfernt
🔹 3. Letzten Commit ändern (git commit --amend)
bash
# Letzten Commit ändern (Nachricht oder Inhalt)
git commit --amend -m "Neue Commit-Nachricht"
# Dateien zum letzten Commit hinzufügen
git add vergessene-datei.js
git commit --amend --no-edit # --no-edit behält die alte Nachricht bei⚠️ Achtung:
- Verwenden Sie
--amendnicht, wenn Sie den Commit bereits gepusht haben!
🔹 4. Alten Commit sicher rückgängig machen (git revert)
bash
# Einen bestimmten Commit rückgängig machen (erstellt einen neuen Commit)
git revert a1b2c3d
# Ohne Commit (Änderungen nur im Working Directory)
git revert --no-commit a1b2c3dVorteile:
- ✅ Sicher: Der ursprüngliche Commit bleibt in der Historie
- ✅ Team-freundlich: Keine Probleme beim Pushen
🔹 5. Commits löschen (git reset --hard) (⚠️ Gefährlich!)
bash
# Letzten Commit löschen (alle Änderungen gehen verloren!)
git reset --hard HEAD~1
# Zu einem alten Commit zurückkehren (alle nachfolgenden Commits löschen)
git reset --hard a1b2c3d⚠️ Warnung:
- Dies löscht alle nachfolgenden Commits unwiderruflich!
- Verwenden Sie es nur, wenn Sie wirklich alles verwerfen möchten.
4.3 Dateien umbenennen und löschen (git mv, git rm)
🔹 1. Dateien umbenennen (git mv)
bash
# Datei umbenennen (und automatisch zur Staging Area hinzufügen)
git mv alter-name.js neuer-name.js
# Dann committen
git commit -m "Rename: alter-name.js zu neuer-name.js"Erklärung:
- ✅
git mvist dasselbe wie:bashmv alter-name.js neuer-name.js git add neuer-name.js git rm alter-name.js
🔹 2. Dateien löschen (git rm)
bash
# Datei löschen (und aus der Staging Area entfernen)
git rm datei.js
# Datei nur aus dem Repository entfernen (lokal behalten)
git rm --cached datei.js
# Dann committen
git commit -m "Remove: datei.js gelöscht"Optionen:
| Option | Erklärung |
|---|---|
git rm <datei> | Löscht Datei lokal und aus dem Repository |
git rm --cached <datei> | Löscht Datei nur aus dem Repository (bleibt lokal erhalten) |
git rm -r ordner/ | Löscht einen Ordner rekursiv |
4.4 Dateiänderungen anzeigen (git diff)
📖 Was ist git diff?
git diff zeigt Unterschiede zwischen verschiedenen Zuständen.
🔹 1. Arbeitsbereich vs. Staging Area
bash
# Zeige alle nicht gespeicherten Änderungen (Working Dir vs. Staging)
git diffAusgabe-Beispiel:
diff
diff --git a/index.html b/index.html
index 83db1a2..f3a5b6c 100644
--- a/index.html
+++ b/index.html
@@ -1,3 +1,4 @@
<h1>Willkommen</h1>
+<p>Neuer Paragraph</p>🔹 2. Staging Area vs. Repository (Letzter Commit)
bash
# Zeige Änderungen in der Staging Area (Staging vs. letzter Commit)
git diff --staged
# oder
git diff --cached🔹 3. Arbeitsbereich vs. Repository (Letzter Commit)
bash
# Zeige alle Änderungen (Working Dir + Staging vs. letzter Commit)
git diff HEAD🔹 4. Zwischen zwei Commits vergleichen
bash
# Unterschied zwischen zwei Commits anzeigen
git diff a1b2c3d..e4f5g6h
# Kurze Zusammenfassung (nur Dateinamen)
git diff --stat a1b2c3d..e4f5g6h
# Bestimmte Datei vergleichen
git diff a1b2c3d..e4f5g6h -- index.html🔹 5. Zwischen zwei Branches vergleichen
bash
# Unterschied zwischen main und feature-branch
git diff main..feature-branch
# Welche Dateien wurden geändert?
git diff --name-only main..feature-branch4.5 Lokales Repository sichern und migrieren
🔹 1. Lokales Repository kopieren (Backup)
bash
# Methode 1: Einfaches Kopieren (funktioniert, da .git enthalten ist)
cp -r mein-projekt/ backup-projekt/
# Methode 2: Neues Clone erstellen (empfohlener)
git clone /pfad/zu/mein-projekt backup-projekt🔹 2. Repository auf einen neuen Remote-Server migrieren
bash
# 1. Bestehendes Repository klonen (oder im bestehenden arbeiten)
cd mein-projekt
# 2. Alten Remote entfernen
git remote remove origin
# 3. Neuen Remote hinzufügen
git remote add origin https://github.com/neuer-user/neues-projekt.git
# 4. Alle Branches und Tags pushen
git push -u origin --all
git push -u origin --tags🔹 3. Bundle erstellen (Für Offline-Transfer)
bash
# Bundle-Datei erstellen (enthält gesamtes Repository)
git bundle create mein-projekt.bundle --all
# Bundle auf einem anderen Computer klonen
git clone mein-projekt.bundle neues-projekt4.6 Häufige Fehler und Lösungen
❌ Fehler 1: "fatal: not a git repository"
Ursache: Sie sind nicht in einem Git-Repository.
Lösung:
bash
# Überprüfen, ob .git-Ordner existiert
ls -la # Mac/Linux
dir /a # Windows
# Falls nicht, Repository initialisieren
git init❌ Fehler 2: "error: failed to push some refs"
Ursache: Remote hat Commits, die lokal nicht vorhanden sind.
Lösung:
bash
# Zuerst pullen (fetch + merge)
git pull origin main
# Dann pushen
git push origin main❌ Fehler 3: "fatal: ambiguous argument"
Ursache: Ungültige Commit-Referenz.
Lösung:
bash
# Überprüfen Sie den Commit-Hash
git log --oneline
# Verwenden Sie den korrekten Hash
git reset --hard a1b2c3d # Beispiel❌ Fehler 4: Datei wurde aus Versehen gelöscht
Lösung (wenn die Datei committet war):
bash
# Datei aus dem letzten Commit wiederherstellen
git checkout HEAD -- index.htmlLösung (wenn die Datei nicht committet war):
- ❌ Kann nicht wiederhergestellt werden, es sei denn, Sie haben ein Backup.
❌ Fehler 5: "Permission denied" beim Pushen
Ursache: Keine Berechtigung für das Remote-Repository.
Lösung:
- ✅ Überprüfen Sie Ihren SSH-Key oder Ihr Token
- ✅ Stellen Sie sicher, dass Sie Schreibzugriff haben
bash
# SSH-Key testen (GitHub)
ssh -T git@github.com
# Falls Fehler, SSH-Key erstellen und bei GitHub hinterlegen📝 Zusammenfassung
In diesem Kapitel haben Sie gelernt:
- ✅
git logerweitert nutzen (Filtern, Formatieren, Grafiken) - ✅ Änderungen rückgängig machen (
restore,reset,revert,amend) - ✅ Dateien umbenennen und löschen (
mv,rm) - ✅ Unterschiede anzeigen (
git diffin allen Varianten) - ✅ Lokales Repository sichern (Kopieren, Migrieren, Bundle)
- ✅ Häufige Fehler beheben
Nächstes Kapitel: Wir werden Branching & Merging lernen (Git-Kernfunktion).
🔗 Weiterführende Links
Copyright © 2024 Git-Tutorial für Anfänger
