# Commits ## Was ist ein Commit? Ein **Commit** ist ein Schnappschuss deines Projekts zu einem bestimmten Zeitpunkt. Er speichert den aktuellen Stand der getrackten Dateien und sorgt für eine nachvollziehbare Versionshistorie. **Ein Commit enthält:** - Den Zustand der getrackten Dateien - Eine Commit-Message zur Beschreibung der Änderung - Einen eindeutigen Hash (zur Identifikation) - Infos über den Autor (Name, E-Mail, Zeitstempel) **Info:** Git speichert bei Commits nicht jedes Mal alle Dateien komplett neu, sondern nur die Änderungen (Diffs) zum vorherigen Zustand. \ Das macht das Ganze effizient und schnell. ## Warum Commits? Mit Commits kannst du: - Änderungen nachvollziehen („Was wurde wann geändert und warum?“) - Fehler zurückverfolgen und frühere Versionen wiederherstellen - Änderungen rückgängig machen, ohne alles manuell löschen zu müssen **Tipp:** Commits sind wie Checkpoints in nem Game: Wenn was schiefläuft, springst du einfach zu einem stabilen Zustand zurück. ## Änderungen tracken Git funktioniert nicht von allein – du entscheidest selbst, welche Änderungen wichtig sind und welche ignoriert werden sollen. Dafür gibt’s das sogenannte **Staging Area-System**. Eine Datei in deinem Projekt kann drei Zustände haben: - **Untracked:** Git kennt die Datei noch nicht. - **Staged:** Die Datei wurde ausgewählt („zum Commit vorgemerkt“). - **Committed:** Die Datei ist Teil eines Snapshots im Repository – also dauerhaft gespeichert. ## Die Staging Area Zwischen deinem Arbeitsverzeichnis und dem Repository liegt die **Staging Area**. Sie ist wie ne Zwischenablage für alles, was beim nächsten Commit dabei sein soll. Alles auf einmal stagen: ```bash git add . ``` Nur bestimmte Dateien stagen: ```bash git add ``` **Tipp:** Bevor du anfängst zu stagen, immer erstmal die neuesten Änderungen vom Remote holen: `git pull` ## Commit erstellen Ein Commit speichert die gestagten Änderungen dauerhaft im lokalen Repository. Befehl: ```bash git commit -m "Kurze Commit-Nachricht" ``` Die Message sollte kurz und klar sagen, was geändert wurde. Beispiel: ```bash git commit -m "Fix: Speicherleck im Audio-Buffer behoben" ``` ## Commit pushen Ein Commit ist erstmal nur lokal. Um ihn ins Remote-Repo (z. B. GitHub) zu pushen: ```bash git push ``` Wenn du nen neuen Branch pushst oder ihn explizit setzen willst: ```bash git push -u origin ``` ## Änderungen pullen Wenn du die neuesten Änderungen aus dem Remote-Repository holen willst: ```bash git pull ``` Das zieht die neuesten Commits vom Remote (meist `origin`) und merged sie in deinen aktuellen Branch. Von einem bestimmten Remote oder Branch: ```bash git pull origin ```