# Git Cheatsheet ## Login / Authentifizieren ```bash # Git-User-Info lokal setzen (für Commits) git config --global user.name "Dein Name" git config --global user.email "deine@email.de" ``` ## Create & Clone ```bash # Aktuellen Ordner in eine Repository verwandeln git init # Repository von einem Link klonen git clone # Repository von einem Link zu einem bestimmten Pfad klonen git clone ``` ## Add & Remove ```bash # Einzelne Datei tracken & stagen git add # Alle geänderte Dateien tracken & stagen git add . # Datei aus dem Arbeitsverzeichnis entfernen git rm ``` ## Commit & Synchronize ```bash # Commit erstellen git commit -m "fix: Quick hotfix" # Commit erstellen und bereits getrackten dateien stagen git commit -am "fix: Quick hotfix" # Alle lokalen Commits pushen git push # Alle lokalen Commits zu einer bestimmten branch pushen git push origin # Alle lokalen Commits zu einer neuen remote pushen git remote add upstream git push -u upstream main ``` ## Zu einem alten Commit zurückkehren ```bash # 1. Zuerst die Commit-Historie anzeigen, um den Hash des gewünschten Commits zu finden git log # zeigt die letzten Commits an, inklusive deren Hashs (zufällige Zeichenfolge) # Setze den Branch auf den gewünschten Commit zurück git reset --hard ``` ## Branches ```bash # Aktuellen Branch anzeigen git branch # Neuen Branch erstellen (aber nicht wechseln) git branch # Neuen Branch erstellen UND direkt wechseln git checkout -b # Zu bestehendem Branch wechseln git checkout # Branch löschen git branch -d # nur wenn schon gemerged git branch -D # erzwingen # Alle lokalen Branches anzeigen git branch # Remote-Branches anzeigen git branch -r # Alle Branches (lokal + remote) git branch -a # Lokalen Branch auf Remote pushen git push -u origin ``` ## Mergen ```bash # Aktuellen Status des Repositories anzeigen git status # Zu dem Branch wechseln, in den du mergen willst (z.B. main) git checkout # Mergen eines anderen Branches (z.B. feature-branch) in den aktuellen Branch git merge # Merge rückgängig machen, falls du den Merge noch nicht committet hast git merge --abort # Den Merge-Commit durch einen "Squash" zusammenfassen (optional) git merge --squash # fasst alle Commits des Branches in einen zusammen git commit # Commit erstellen ``` ## Merge Konflikte lösen ```bash # 1. Git meldet einen Konflikt, falls es welche gibt git status # zeigt an, welche Dateien Konflikte haben # 2. Öffne die betroffenen Dateien, um die Konflikte zu lösen # Konflikte werden in der Datei markiert: # >>>>>>> HEAD und ======= trennen die Versionen # Lösche die Marker und entscheide, welche Version du behalten möchtest # 3. Nachdem du die Konflikte manuell behoben hast, markiere die Dateien als gelöst git add # fügt die gelösten Dateien zum Staging-Bereich hinzu # 4. Nachdem alle Konflikte gelöst sind, beende den Merge-Prozess git commit # Commit für den Merge erstellen (Git wird eine Standard-Merge-Nachricht vorschlagen) # 5. Falls du den Merge abbrechen möchtest, z.B. wenn du die Konflikte nicht lösen kannst git merge --abort # Rückgängig machen und zum vorherigen Zustand zurückkehren (nur während eines unvollständigen Merges) # 6. Falls du den Merge nach Konfliktlösung fortsetzen willst (wenn z.B. der Merge in einem "Squash"-Commit abgeschlossen wurde) git merge --continue # Fortsetzen des Merges (normalerweise nur nach einem Rebase oder Squash, der den Merge unterbricht) ``` ## Tagging ```bash # Alle bestehenden Tags anzeigen git tag # Einen neuen Tag erstellen (z.B. v1.0.0) git tag # Einen Tag mit einer Nachricht versehen git tag -a -m "Tag Nachricht" # Einen Tag zu einem bestimmten Commit erstellen (z.B. nach Commit ID) git tag # Einen Tag auf einem Remote-Repository veröffentlichen git push origin # Alle Tags auf das Remote-Repository pushen git push --tags # Einen Tag löschen (lokal) git tag -d # Einen Tag löschen (remote) git push --delete origin # Einen Tag auf einen bestimmten Commit verschieben (z.B. nach Commit ID) git tag -f # Einen Tag auschecken, um zu diesem Punkt im Repository zu gehen git checkout # Einen Tag mit einer Nachricht bearbeiten (falls nicht noch gepusht) git tag -a -m "Neue Nachricht" ```