Appearance
Kapitel 3: Grundlagen lokaler Repositories
3.1 Lokales Repository erstellen (Zwei Methoden)
🔹 Methode 1: git init (Neues Repository initialisieren)
Verwenden Sie git init, um ein neues, leeres Repository zu erstellen.
bash
# 1. Neuen Projektordner erstellen
mkdir mein-projekt
cd mein-projekt
# 2. Git-Repository initialisieren
git init
# Erwartete Ausgabe:
# Initialized empty Git repository in .../mein-projekt/.git/Was passiert?
- ✅ Git erstellt einen versteckten
.git-Ordner - ✅ Dieser Ordner enthält alle Versionsinformationen
Überprüfen:
bash
# .git-Ordner anzeigen (Windows)
dir /a
# .git-Ordner anzeigen (Mac/Linux)
ls -la🔹 Methode 2: git clone (Bestehendes Repository klonen)
Verwenden Sie git clone, um ein bereits existierendes Repository herunterzuladen.
bash
# Repository von GitHub klonen
git clone https://github.com/benutzer/projekt.git
# Erwartete Ausgabe:
# Cloning into 'projekt'...
# remote: Enumerating objects: 100, done.
# Receiving objects: 100% ...Was passiert?
- ✅ Das gesamte Repository wird heruntergeladen
- ✅ Alle Dateien und die vollständige Historie werden kopiert
Mit Benutzername und Token (GitHub):
bash
# Falls Authentication erforderlich
git clone https://benutzername:token@github.com/benutzer/projekt.git📊 Vergleich: git init vs. git clone
| Aspekt | git init | git clone |
|---|---|---|
| Verwendung | Neues Projekt starten | An bestehendem Projekt teilnehmen |
| Inhalt | Leeres Repository | Vollständiges Repository mit Historie |
| Remote | Kein Remote (muss manuell hinzugefügt werden) | Remote ist automatisch konfiguriert |
| Anwendung | Einzelentwicklung, neue Ideen | Teamarbeit, Open-Source-Beiträge |
3.2 Working Directory, Staging Area, Repository (Kernkonzepte)
Git hat drei Zustände, in denen sich Ihre Dateien befinden können:
📖 Drei-Bereiche-Erklärung
┌─────────────────┐
│ Working Dir │ ← Ihre aktuellen Dateien (Bearbeitung)
│ (Arbeits- │
│ verzeichnis) │
└────────┬────────┘
│ git add
↓
┌─────────────────┐
│ Staging Area │ ← Vorbereitete Änderungen (für Commit)
│ (Index/ │
│ Zwischen- │
│ speicher) │
└────────┬────────┘
│ git commit
↓
┌─────────────────┐
│ Repository │ ← Permanent gespeicherte Versionen
│ (Lokales │
│ Repository) │
└─────────────────┘🔹 1. Working Directory (Arbeitsverzeichnis)
- Was ist das? Die Dateien, an denen Sie gerade arbeiten
- Status prüfen:
git status - Farbmarkierung:
- 🔴 Rot: Nicht getrackte Dateien (untracked)
- 🔵 Blau: Geänderte Dateien (modified)
Beispiel:
bash
# Datei erstellen
echo "Hallo Welt" > index.html
# Status prüfen
git status
# Ausgabe:
# On branch main
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
# index.html🔹 2. Staging Area (Index / Zwischenspeicher)
- Was ist das? Ein "Zwischenlager" für Änderungen, die Sie als nächstes committen wollen
- Hinzufügen:
git add <datei> - Entfernen:
git restore --staged <datei>
Beispiel:
bash
# Datei zur Staging Area hinzufügen
git add index.html
# Status prüfen
git status
# Ausgabe:
# On branch main
# Changes to be committed:
# (use "git restore --staged <file>..." to unstage)
# new file: index.htmlAlle Dateien hinzufügen:
bash
# Alle Dateien hinzufügen
git add .
# oder
git add -A🔹 3. Repository (Lokales Repository)
- Was ist das? Der
.git-Ordner, in dem alle committeten Versionen gespeichert sind - Committen:
git commit -m "Nachricht" - Historie anzeigen:
git log
Beispiel:
bash
# Committen
git commit -m "Initialer Commit"
# Ausgabe:
# [main (root-commit) a1b2c3d] Initialer Commit
# 1 file changed, 1 insertion(+)
# create mode 100644 index.html📊 Zustandsübergänge (State Transitions)
| Von | Nach | Befehl |
|---|---|---|
| Working Directory | Staging Area | git add <datei> |
| Staging Area | Repository | git commit -m "Nachricht" |
| Repository | Working Directory | git checkout <commit> (Vorsicht!) |
| Staging Area | Working Directory | git restore --staged <datei> |
3.3 Kern-Grundbefehle (Praxis)
🔹 1. git add (Dateien zur Staging Area hinzufügen)
bash
# Einzelne Datei hinzufügen
git add index.html
# Mehrere Dateien hinzufügen
git add index.html style.css script.js
# Alle Dateien im aktuellen Verzeichnis hinzufügen
git add .
# Alle Dateien im gesamten Projekt hinzufügen
git add -A
# Nur aktualisierte Dateien hinzufügen (keine neuen Dateien)
git add -uTipp: Verwenden Sie git add . für kleine Projekte, aber git add -A für größere Projekte.
🔹 2. git commit (Änderungen ins Repository speichern)
bash
# Standard-Commit
git commit -m "Feature: Login-Seite hinzugefügt"
# Änderungen direkt committen (ohne git add)
git commit -am "Bugfix: Fehler in Login behoben"
# ⚠️ Achtung: Funktioniert nur für bereits getrackte Dateien!Commit-Nachrichten-Regeln (Best Practices):
- ✅ Kurz und prägnant: Maximale 50 Zeichen für die erste Zeile
- ✅ Präsens verwenden: "Fügt Feature hinzu" statt "Feature hinzugefügt"
- ✅ Präfix verwenden:
Feature:,Fix:,Docs:,Refactor:
Beispiel:
bash
git commit -m "Feature: Benutzerprofil-Seite erstellt"
git commit -m "Fix: Login-Fehler behoben"
git commit -m "Docs: README aktualisiert"🔹 3. git status (Aktuellen Status anzeigen)
bash
# Status anzeigen
git status
# Kurze Statusanzeige
git status -s
# Ausgabe-Beispiel (kurz):
# A index.html ← Hinzugefügt (Added)
# M style.css ← Geändert (Modified)
# ?? script.js ← Nicht getrackt (Untracked)Status-Symbole:
| Symbol | Bedeutung |
|---|---|
?? | Nicht getrackte Datei (untracked) |
A | Neue Datei (added to staging) |
M | Geänderte Datei (modified) |
D | Gelöschte Datei (deleted) |
R | Umbenannte Datei (renamed) |
🔹 4. git log (Commit-Historie anzeigen)
bash
# Vollständige Historie anzeigen
git log
# Kurze Historie (eine Zeile pro Commit)
git log --oneline
# Die letzten 5 Commits anzeigen
git log -5
# Historie mit Grafik (Branches anzeigen)
git log --graph --oneline --all
# Autor filtern
git log --author="Max Mustermann"
# Suche nach Schlüsselwort in Commit-Nachricht
git log --grep="Fix"Ausgabe-Beispiel:
bash
commit a1b2c3d4e5f6789... (HEAD -> main)
Author: Max Mustermann <max@example.com>
Date: Mon May 26 14:30:00 2024 +0200
Feature: Login-Seite hinzugefügtNavigation im Log:
Enter: Weiterblätternq: Beenden
3.4 Versionsrückgängigmachen (git reset)
📖 Was ist git reset?
git reset verschiebt den HEAD (aktueller Zweig) auf einen früheren Commit.
🔹 Drei Modi von git reset
| Modus | Befehl | Working Dir | Staging Area | Repository |
|---|---|---|---|---|
| Soft | git reset --soft <commit> | Bleibt unverändert | Bleibt unverändert | Wird zurückgesetzt |
| Mixed (Standard) | git reset --mixed <commit> | Bleibt unverändert | Wird zurückgesetzt | Wird zurückgesetzt |
| Hard | git reset --hard <commit> | Wird zurückgesetzt | Wird zurückgesetzt | Wird zurückgesetzt |
🔹 1. git reset --soft (Sicherster Modus)
Setzt das Repository zurück, lässt aber Ihre Änderungen in der Staging Area.
bash
# Letzten Commit rückgängig machen (Änderungen bleiben in staging)
git reset --soft HEAD~1
# Zum Commit vor 3 Commits zurückkehren
git reset --soft HEAD~3Anwendung: Wenn Sie den letzten Commit ändern möchten (z.B. Commit-Nachricht korrigieren).
🔹 2. git reset --mixed (Standard)
Setzt Repository und Staging Area zurück, lässt aber die Änderungen im Working Directory.
bash
# Standard (--mixed ist Standard)
git reset HEAD~1
# oder explizit
git reset --mixed HEAD~1Anwendung: Wenn Sie Änderungen rückgängig machen, aber die Dateien behalten möchten.
🔹 3. git reset --hard (⚠️ Gefährlich!)
Setzt alles zurück – alle Änderungen gehen verloren!
bash
# ⚠️ Achtung: Alle Änderungen gehen verloren!
git reset --hard HEAD~1
# Zum ältesten Commit zurückkehren
git reset --hard a1b2c3dAnwendung: Nur wenn Sie wirklich alles verwerfen möchten.
Tipp: Erstellen Sie vor git reset --hard immer ein Backup!
🆘 Rettung nach git reset --hard
Wenn Sie einen Hard Reset bereuen, können Sie Ihre Commits wiederherstellen:
bash
# Reflog anzeigen (zeigt alle Bewegungen von HEAD)
git reflog
# Ausgabe-Beispiel:
# a1b2c3d HEAD@{0}: reset --hard HEAD~1
# e4f5g6h HEAD@{1}: commit: Feature hinzugefügt
# Commit wiederherstellen
git reset --hard e4f5g6h3.5 Dateien ignorieren (.gitignore konfigurieren)
📖 Warum .gitignore?
Manche Dateien sollten nicht in Git gespeichert werden:
- ✅ Log-Dateien (
*.log) - ✅ Temporäre Dateien (
*.tmp,*.cache) - ✅ Build-Artefakte (
dist/,build/) - ✅ Abhängigkeiten (
node_modules/) - ✅ Umgebungsvariablen (
.env)
🔹 .gitignore erstellen und konfigurieren
bash
# .gitignore-Datei erstellen
touch .gitignore # Mac/Linux
echo. > .gitignore # WindowsBeispiel-Inhalt von .gitignore:
gitignore
# Abhängigkeiten
node_modules/
vendor/
# Build-Artefakte
dist/
build/
*.log
# Umgebungsvariablen
.env
.env.local
# IDE-Dateien
.vscode/
.idea/
*.swp
# Betriebssystem-Dateien
.DS_Store # Mac
Thumbs.db # Windows🔹 .gitignore Muster (Patterns)
| Muster | Bedeutung | Beispiel |
|---|---|---|
*.log | Alle Dateien mit Endung .log | app.log, error.log |
dist/ | Den Ordner dist und seinen Inhalt | dist/index.html |
/tmp | Nur den Ordner tmp im Root-Verzeichnis | tmp/, aber nicht src/tmp/ |
!wichtig.log | Ausnahme (nicht ignorieren) | wichtig.log wird getrackt |
**/logs | Alle Ordner namens logs rekursiv | logs/, src/logs/ |
🔹 Bereits getrackte Dateien ignorieren
Wenn eine Datei bereits in Git ist, wird .gitignore sie nicht ignorieren.
Lösung: Datei aus dem Index entfernen (aber lokal behalten):
bash
# Datei aus dem Repository entfernen, aber lokal behalten
git rm --cached .env
# Dann committen
git commit -m "Chore: .env zur .gitignore hinzugefügt"3.6 Lokales Repository Praxisbeispiel (Hands-on)
📝 Szenario: Neues Projekt erstellen und versionieren
Schritt 1: Projekt initialisieren
bash
# Neuen Ordner erstellen
mkdir mein-blog
cd mein-blog
# Git-Repository initialisieren
git initSchritt 2: Dateien erstellen
bash
# README.md erstellen
echo "# Mein Blog" > README.md
# index.html erstellen
echo "<h1>Willkommen zu meinem Blog</h1>" > index.htmlSchritt 3: Status prüfen
bash
git status
# Ausgabe:
# On branch main
# No commits yet
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
# README.md
# index.htmlSchritt 4: Dateien zur Staging Area hinzufügen
bash
git add .
git status
# Ausgabe:
# Changes to be committed:
# (use "git restore --staged <file>..." to unstage)
# new file: README.md
# new file: index.htmlSchritt 5: Committen
bash
git commit -m "Initialer Commit: Blog-Projekt gestartet"
# Ausgabe:
# [main (root-commit) a1b2c3d] Initialer Commit: Blog-Projekt gestartet
# 2 files changed, 2 insertions(+)Schritt 6: Änderungen vornehmen
bash
# index.html ändern
echo "<p>Dies ist ein Paragraph.</p>" >> index.html
# Status prüfen
git status
# Ausgabe:
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# modified: index.htmlSchritt 7: Änderungen committen
bash
git add index.html
git commit -m "Feature: Paragraph zur index.html hinzugefügt"Schritt 8: Historie anzeigen
bash
git log --oneline
# Ausgabe:
# e4f5g6h Feature: Paragraph zur index.html hinzugefügt
# a1b2c3d Initialer Commit: Blog-Projekt gestartet📝 Zusammenfassung
In diesem Kapitel haben Sie gelernt:
- ✅ Lokales Repository erstellen (
git init,git clone) - ✅ Drei Bereiche verstehen (Working Directory, Staging Area, Repository)
- ✅ Kern-Grundbefehle (
git add,git commit,git status,git log) - ✅ Versionen rückgängig machen (
git reset --soft/mixed/hard) - ✅ Dateien ignorieren (
.gitignorekonfigurieren) - ✅ Praxisbeispiel (Projekt initialisieren, ändern, committen)
Nächstes Kapitel: Wir werden Git-Befehle vertiefen (git log erweitert, Änderungen rückgängig machen, git diff).
🔗 Weiterführende Links
Copyright © 2024 Git-Tutorial für Anfänger
