# Die wichtigsten Git-Grundbegriffe für Einsteiger 📘

Bevor du mit Git arbeitest, solltest du ein paar **zentrale Begriffe** verstehen. Diese tauchen in fast jeder Anleitung auf – und sobald du sie verinnerlicht hast, wird alles andere viel leichter verständlich.

---

## Repository – dein Projektarchiv 📁

Ein **Repository** (kurz: *Repo*) ist im Grunde ein **Ordner mit Gedächtnis**. Es enthält alle Dateien deines Projekts *und* die komplette Änderungshistorie – also wer wann was geändert hat.

Es gibt zwei Arten:

- **Lokales Repository:** Liegt auf deinem Computer, nur du hast Zugriff.
- **Remote Repository:** Liegt auf einem Server (z. B. GitHub), kann von mehreren Personen genutzt werden.

> 💡 *Wenn du in PhpStorm ein Projekt „unter Git-Kontrolle stellst", erstellst du ein lokales Repository.*

---

## Stage (Staging Area) – die Vorbereitungszone 📋

Die **Staging Area** ist eine Art **Wartezone zwischen deinen Änderungen und dem nächsten Commit**. Wenn du eine Datei änderst, ist sie zunächst nur im sogenannten *Working Directory* verändert. Erst wenn du sie „stagst", signalisierst du Git: *„Diese Änderung soll Teil des nächsten Commits sein."*

Das Vorgehen ist also:

1. Du änderst Dateien (Working Directory)
2. Du wählst aus, welche Änderungen gespeichert werden sollen → **Stage**
3. Du speicherst diese Auswahl dauerhaft → **Commit**

> 💡 *Das ist praktisch, weil du nicht immer alle Änderungen auf einmal speichern musst, sondern gezielt auswählen kannst.*

---

## Commit – ein Schnappschuss deines Projekts 📸

Ein **Commit** ist ein **gespeicherter Zustand deines Projekts zu einem bestimmten Zeitpunkt**. Jeder Commit enthält eine eindeutige ID (einen sogenannten *Hash*), eine Nachricht, die beschreibt was geändert wurde, den Autor und das Datum sowie die tatsächlichen Änderungen an den Dateien.

Commits sind das Herzstück von Git. Du kannst sie dir wie **Speicherpunkte in einem Videospiel** vorstellen – du kannst jederzeit zu einem früheren Commit zurückkehren.

```text
Beispiel einer Commit-Historie:
───────────────────────────────
Commit 3: "Login-Formular validiert"
Commit 2: "Login-Seite erstellt"
Commit 1: "Projektstruktur angelegt"
```

---

## Branch – parallele Entwicklungslinien 🌿

Ein **Branch** ist ein **eigenständiger Entwicklungszweig**. Standardmäßig arbeitest du auf dem Branch namens `main` (früher oft `master`). Du kannst aber jederzeit einen neuen Branch erstellen, um z. B. ein neues Feature zu entwickeln – ohne den Hauptzweig zu beeinflussen.

```mermaid
gitGraph
    commit id: "Start"
    commit id: "Basis fertig"
    branch feature/login
    commit id: "Login-Seite"
    commit id: "Validierung"
    checkout main
    commit id: "Bugfix"
    merge feature/login id: "Merge"
```

> 💡 *Branches sind wie parallele Universen deines Projekts – du kannst experimentieren, ohne das „echte" Projekt zu gefährden.*

---

## Merge – Zweige zusammenführen 🔀

Wenn du mit der Arbeit in einem Branch fertig bist, möchtest du diese Änderungen meist zurück in den `main`-Branch bringen. Diesen Vorgang nennt man **Merge**.

Git versucht dabei, die Änderungen automatisch zusammenzuführen. Falls jedoch *dieselbe Stelle* in beiden Branches unterschiedlich geändert wurde, entsteht ein **Merge-Konflikt**, den du manuell lösen musst. PhpStorm bietet dafür ein praktisches visuelles Tool.

---

## Remote – die Verbindung zur Außenwelt 🌐

Ein **Remote** ist eine **Referenz auf ein externes Repository**, typischerweise auf GitHub, GitLab oder Bitbucket. Der Standard-Remote heißt meist `origin`.

Wenn du ein Projekt auf GitHub hast und lokal damit arbeitest, ist `origin` die Brücke zwischen deinem Computer und GitHub:

| Begriff | Bedeutung |
|---------|-----------|
| `origin` | Der Name des Remote-Repositorys (meist auf GitHub) |
| Remote-URL | Die Adresse, z. B. `https://github.com/user/projekt.git` |

---

## Clone – ein bestehendes Projekt herunterladen 📥

**Clone** bedeutet, ein komplettes Remote-Repository auf deinen Computer zu kopieren – inklusive aller Dateien *und* der gesamten Historie.

```bash
git clone https://github.com/beispiel/projekt.git
```

> 💡 *In PhpStorm kannst du über „Get from VCS" direkt ein GitHub-Projekt clonen und sofort loslegen.*

---

## Push und Pull – Synchronisation mit dem Remote 🔄

Diese beiden Begriffe beschreiben den **Datenaustausch zwischen deinem lokalen Repository und dem Remote**:

- **Push** 📤: Du **sendest** deine lokalen Commits an das Remote-Repository (z. B. GitHub). Damit werden deine Änderungen für andere sichtbar bzw. gesichert.

- **Pull** 📥: Du **holst** die neuesten Änderungen vom Remote-Repository auf deinen Computer. Falls andere Personen Änderungen gepusht haben, bekommst du diese so.

```mermaid
flowchart LR
    A["Lokales Repository<br>auf deinem PC"] -->|Push| B["Remote Repository<br>z.B. auf GitHub"]
    B -->|Pull| A
```

---

## Zusammenfassung auf einen Blick 🗺️

| Begriff | Kurzerklärung |
|---------|---------------|
| **Repository** | Projektordner mit kompletter Änderungshistorie |
| **Stage** | Vorauswahl der Änderungen für den nächsten Commit |
| **Commit** | Gespeicherter Schnappschuss des Projektzustands |
| **Branch** | Paralleler Entwicklungszweig |
| **Merge** | Zusammenführen zweier Branches |
| **Remote** | Verbindung zu einem externen Repository |
| **Clone** | Komplettes Repository herunterladen |
| **Push** | Lokale Commits zum Remote hochladen |
| **Pull** | Änderungen vom Remote herunterladen |

---

Mit diesen Begriffen im Hinterkopf wirst du die folgenden Kapitel deutlich leichter verstehen – sie bilden das **Vokabular**, mit dem Git „spricht". 🎯