Git Cheat Sheet

Git ist ein hervorragendes Tool, aber auch leider oft zum verzweifeln. Es ist ein Versionskontrollsystem, das von Linus Torvalds entwickelt wurde. Es ist das am häufigsten verwendete Versionskontrollsystem und wird von vielen in der IT verwendet. In diesem Artikel möchte ich dir die wichtigsten Git Befehle und auch Lösungen für bekannte und häufige Probleme vorstellen.

Git Repository erstellen

Mit git init wird ein neues lokales Git Repository erstellt. Das heißt, dass Git nun alle Änderungen in diesem Ordner verfolgt. Du kannst git init auch in einem bereits bestehenden Git Repository verwenden, um ein neues Repository zu erstellen. Das ist hilfreich, wenn du ein Projekt kopierst und die Git History nicht mitkopieren möchtest.

git init

Den Status eines Projektes prüfen

Um den Status eines Projektes zu prüfen kannst du git status verwenden. Dieser Befehl zeigt dir alle Änderungen an, die du gemacht hast. Du kannst dir auch nur die Dateien anzeigen lassen, die sich im Staging befinden. Das ist hilfreich, wenn du nur die Dateien sehen möchtest, die du für den nächsten Commit ausgewählt hast. Du kannst dir den Status auch in einem kompakteren Format anzeigen lassen.

# Gibt den Zustand aller Dateien zurück
git status
# Gibt den Zustand aller Dateien im Staging zurück
git status --staged
# Kompaktere Auflistung
git status -s

# Mögliche Werte
# ?? Datei wurde hinzugefügt, aber noch nicht getrackt
# A  Datei wurde hinzugefügt und wird getrackt
# M  Datei wurde geändert
# D  Datei wurde gelöscht
# R  Datei wurde umbenannt
# C  Datei wurde kopiert
# U  Datei ist unmerged

Neue Änderungen ins Staging hinzufügen

Mit git add kannst du Dateien/Änderungen zu Git hinzufügen (Staging), welche du später für den nächsten Commit einbeziehen möchtest. Du kannst entweder einzelne Dateien, ganze Ordner oder einzelene Änderungen (Codezeilen) hinzufügen.

# Fügt eine Datei hinzu
git add <Dateiname>
# Fügt alle Dateien hinzu
git add .
# Fügt alle Dateien in einem Ordner hinzu
git add <Ordnername>
# Einzelne Änderungen/Hunks auswählen
git add --patch <Dateiname>

Änderungen im Staging commiten

Mit git commit kannst du deine Änderungen welche sich im Staging befinden in das lokale Repository übertragen. Du kannst deinem Commit eine Nachricht hinzufügen, um später nachvollziehen zu können, was du geändert hast.

# Erstellt eine neue Version aus den Dateien im Staging
git commit -m "Nachricht"
# Überspringt Staging, Neue Dateien werden ignoriert
git commit -am "Nachricht"
# Ändert die Nachricht des letzten Commits
# Achtung! Ändert den Commit Hash. Nur verwenden, wenn der Commit noch nicht gepusht wurde
git commit --amend -m "Neue Nachricht"

Die letzten Commits anzeigen

Mit git log kannst du dir die letzten Commits anzeigen lassen. Du kannst dir die Commits in verschiedenen Formaten anzeigen lassen. Du kannst dir die Commits auch in einem Graph anzeigen lassen. Das ist sehr hilfreich, wenn du mit mehreren Branches arbeitest.

# Die letzten Commits
git log
# Die letzten Commits mit Änderungen
git log -p
# Die letzten Commits mit Änderungen und Statistiken
git log -p -stat
# Commits mit Graph
git log --graph
# Die letzten Commits mit Änderungen und Statistiken in einer Zeile
git log --pretty=oneline --graph --decorate --all
# Die letzten 3 Commits
git log -n 3
# Die letzten 3 Commits mit Änderungen
git log -n 3 -p

Alle Aktivitäten anzeigen

Mit git reflog kannst du dir alle Aktionen anzeigen lassen, die du in deinem Repository gemacht hast. Das ist sehr hilfreich, wenn du einen Commit rückgängig machen möchtest. Du kannst dir die Aktionen in verschiedenen Formaten anzeigen lassen.

# Zeigt alle Aktionen an
git reflog
# Zeigt alle Aktionen mit Hash an
git reflog --abbrev-commit
# Zeigt alle Aktionen mit Hash und Datum an
git reflog --abbrev-commit --date=iso

Die Unterschiede zwischen Commits und Dateien anzeigen

Mit git diff kannst du dir die Änderungen zwischen zwei Commits anzeigen lassen. Oder die Änderungen zwischen dem letzten Commit und dem aktuellen Stand.

# Änderungen zwischen dem letzten Commit und dem aktuellen Stand
git diff
# Für Dateien im Staging
git diff --staged
# Änderungen zwischen zwei Commits
git diff <Commit 1> <Commit 2>

Die letzten Änderungen rückgangig machen

Mit git reset kannst du deinen Arbeitsstand zurücksetzen. Du kannst entweder den Arbeitsstand, den Index oder beides zurücksetzen. Du kannst entweder einzelne Dateien, ganze Ordner oder einzelene Änderungen (Codezeilen) zurücksetzen.

# Holt alle Dateien aus dem Staging
git reset
# Holt eine Datei aus dem Staging
git reset <Dateiname>
# Macht den letzten Commit rückgängig. Dateien bleiben im Staging
git reset --soft HEAD~
# Macht den letzten Commit rückgängig. Änderungen bleiben im Workspace erhalten
git reset --mixed HEAD~
# Löscht alle Änderungen des letzten Commits
git reset --hard HEAD~

Dateien aus dem Staging entfernen oder Änderungen rückgängig machen

Mit git restore kannst du Dateien aus dem Staging entfernen oder Änderungen rückgängig machen. Du kannst entweder einzelne Dateien, ganze Ordner oder einzelene Änderungen (Codezeilen) entfernen.

# Entfernt eine Datei aus dem Staging
git restore --staged <Dateiname>
# Du kannst einzelne Änderungen auswählen und aus dem Staging entfernen
git restore --staged --patch <Datei>
# Entfernt alle Dateien aus dem Staging
git restore --staged .
# Macht Änderungen einer Datei rückgängig
git restore <Dateiname>

Eine Änderung dem letzten Commit hinzufügen

Wenn du eine Änderung vergessen hast, kannst du diese dem letzten Commit hinzufügen. Du musst dafür den letzten Commit noch nicht gepusht haben. Wenn du den Commit bereits gepusht hast, solltest du git commit --amend nicht verwenden, da du damit den Commit Hash änderst.

# Änderungen dem letzten Commit hinzufügen
git commit --amend --no-edit

Älteren Commit rückgängig machen

Falls du einen Commit rückgängig machen möchtest, kannst du das mit git revert machen. Du musst dafür den Commit noch nicht gepusht haben. Wenn du den Commit bereits gepusht hast, solltest du dennoch git revert verwenden, da du damit den Commit Hash nicht änderst.

# Finde den betreffenden Commit
# Verwende die Pfeiltasten um in der History zu scrollen und kopiere dir den Hash des betreffenden Commits
git log
# Änderungen des Commits rückgängig machen
# git erstellt einen neuen Commit, der den gewählten Commit rückgängig macht. Du musst dafür noch eine Commit-Message eingeben oder einfach abspeichern
git revert <Commit>

Änderungen einer einzelnen Datei Rückgängig machen

Falls du eine Datei geändert hast und einen älteren Stand dieser Datei wiederherstellen möchtest, kannst du das mit git checkout machen. Der alte Stand der Datei wird dann in den Workspace kopiert. Du musst die Datei dann nur noch speichern.

# Finde den Hash eines Commits vor deinen Änderungen
git log
# Änderungen einer einzelnen Datei rückgängig machen
git checkout <Commit> -- <pfad/zur/datei>
# Die alte Version ist jetzt wiederhergestellt. Du musst die Datei nur noch speichern
git add <pfad/zur/datei>
git commit -m "Nachricht"

Etwas komplett verkackt?

Damit kannst du Dateien zurückholen, die du gelöscht hast, oder Dinge rückgängig machen, die dein Repo zerstört haben, oder einen nicht geglückten Merge oder einfach zu einem Stand zurückkehren, als bestimmte Dinge noch funktioniert haben.

# Zeigt alle Aktionen an
# Du siehst eine Liste mit allem, was du in git getan hast, in allen Branches. Jeder Eintrag hat einen Index: HEAD@{index}
# Finde den Eintrag VOR demjenigen, der alles kaputt gemacht hat.
git reflog
# Setze den HEAD auf den Eintrag VOR demjenigen, der alles kaputt gemacht hat.
git reset HEAD@{index}
# Alles ist jetzt wieder so, wie es vorher war.

Branches erstellen, wechseln und löschen

Anzeigen, Erstellen und Löschen von Branches. Branches sind eine Möglichkeit, um an einem Projekt zu arbeiten, ohne den Hauptzweig zu beeinträchtigen. Wenn du einen Branch erstellst, kopierst du den aktuellen Stand deines Projekts in einen neuen Branch. Du kannst dann in diesem Branch arbeiten, ohne den Hauptzweig zu beeinflussen. Wenn du fertig bist, kannst du deine Änderungen in den Hauptzweig übernehmen.

# Zeigt alle Branches an
git branch
# Erstellt einen neuen Branch
git branch <Branchname>
# Löscht einen Branch
git branch -d <Branchname>

Branches wechseln oder Dateien aus einem anderen Branch kopieren

Mit git checkout kannst du zwischen Branches wechseln. Du kannst auch einen neuen Branch erstellen und direkt in diesen wechseln. Du kannst auch einzelne Dateien aus einem anderen Branch in deinen aktuellen Branch kopieren.

# Wechselt in einen Branch
git checkout <Branchname>
# Erstellt einen neuen Branch und wechselt in diesen
git checkout -b <Branchname>
# Kopiert eine Datei aus einem anderen Branch in deinen aktuellen Branch
git checkout <Branchname> -- <Dateiname>

Branches zusammenführen

Mit git merge kannst du deine Änderungen aus einem Branch in einen anderen Branch übernehmen. Du kannst entweder einen Branch in einen anderen Branch mergen oder einen Branch in deinen aktuellen Branch mergen. Wenn du einen Branch in deinen aktuellen Branch mergst, musst du dich in deinen aktuellen Branch wechseln. Wenn du einen Branch in einen anderen Branch mergst, musst du dich nicht in den Zielbranch wechseln.

# Mergt einen Branch in deinen aktuellen Branch
git merge <Branchname>
# Mergt einen Branch in einen anderen Branch
git merge <Branchname> <Zielbranch>

Ausversehen auf den master commited

Wenn du ausversehen auf den master Branch commited hast, kannst du das mit folgenden Befehlen rückgängig machen. Du musst dafür den Commit noch nicht gepusht haben.

# Erstelle einen neuen Branch
git branch <NeuerBranchname>
# Entferne den letzten Commit vom master
git reset HEAD~ --hard
# Erstelle einen neuen master Branch
git checkout <NeuerBranchname>
# Dein Commit lebt jetzt in dem neuen Branch weiter

In den falschen Branch commited

Wenn du in den falschen Branch commited hast, aber die Änderungen noch behalten möchtest um diese in den richtigen Branch zu commiten dann kannst du das mit folgenden Befehlen rückgängig machen. Du musst dafür den Commit noch nicht gepusht haben.

# Entferne den letzten Commit vom falschen Branch
git reset HEAD~ --soft
# Speichere die Änderungen in den Stash
git stash
# Wechsle in den richtigen Branch
git checkout <RichtigerBranch>
# Hole die Änderungen aus dem Stash
git stash pop
# Füge die Änderungen dem Staging hinzu
git add .
# Commit
git commit -m "Nachricht"
# Jetzt sind deine Änderungen im richtigen Branch

Hier eine Alternative, wenn du die Änderungen nicht im Stash speichern möchtest.

# Wechsle in den richtigen Branch
git checkout <RichtigerBranch>
# Hole die Änderungen aus dem falschen Branch
git cherry-pick <falscherBranch>
# Entferne den Commit vom falschen Branch
git checkout <falscherBranch>
git reset HEAD~ --hard

Das arbeiten mit Remote Repositories

Mit git remote kannst du dir alle Remotes anzeigen lassen. Du kannst auch einen Remote hinzufügen oder entfernen. Remotes sind Verknüpfungen zu einem Remote Repository. Diese Verknüpfungen werden verwendet, um deine Änderungen in ein Remote Repository zu übertragen.

# Zeigt alle Remotes an
git remote
# Fügt einen Remote hinzu
git remote add <Name> <URL>
# Entfernt einen Remote
git remote remove <Name>
# Nennt einen Remote um
git remote rename <AlterName> <NeuerName>
# Zeigt alle Remotes mit URLs an
git remote -v
# Zeigt alle Informationen zu einem Remote an
git remote show <Name>
# Zeigt die URL eines Remotes an
git remote get-url <Name>
# Setzt die URL eines Remotes
git remote set-url <Name> <URL>

Kopieren eines Remote Repository in ein lokales Repository

Mit git clone kannst du ein Repository klonen. Du kannst entweder ein Repository von GitHub oder von einem anderen Git Server klonen. Du kannst auch ein lokales Repository klonen.

# Klonen eines Repositories von GitHub oder einem anderen Git Server
git clone <URL>
# Klonen eines lokalen Repositories
git clone <Pfad>
# Den Namen des Zielordners ändern
git clone <URL> <Zielordner>
# Das Repository wird in den aktuellen Ordner geklont
git clone <URL> .

Lokale Änderungen in ein Remote Repository übertragen

Mit git push kannst du deine Änderungen in ein Remote Repository übertragen. Du kannst deine Änderungen in einen bestimmten Branch übertragen. Du kannst auch alle Branches auf einmal übertragen.

# Überträgt deine Änderungen in den aktuellen Branch
git push
# Überträgt deine Änderungen in den aktuellen Branch und setzt den Upstream
git push -u origin
# Überträgt deine Änderungen in einen bestimmten Branch
git push <Remote> <Branch>
# Überträgt alle Branches
git push --all

Den Stand eines Remote Repositorys in ein lokales Repository übertragen

Mit git fetch kannst du dir alle Änderungen aus einem Remote Repository herunterladen. Du kannst dir auch alle Branches herunterladen. Du kannst dir auch alle Tags herunterladen. Jedoch werden die Änderungen nicht in deinen lokalen Branches übernommen. Du musst die Änderungen mit git merge oder git rebase in deine lokalen Branches übernehmen.

# Lädt alle Änderungen aus einem Remote Repository herunter
git fetch
# Lädt alle Branches aus einem Remote Repository herunter
git fetch --all
# Lädt alle Tags aus einem Remote Repository herunter
git fetch --tags
# Merge die Änderungen in deinen lokalen Branch
git merge origin/master
# Rebase die Änderungen in deinen lokalen Branch
git rebase origin/master

Den Stand eines Remote Repositorys in ein lokales Repository übertragen und zusammenführen

Mit git pull kannst du dir alle Änderungen aus einem Remote Repository herunterladen und in deine lokalen Branches übernehmen. Du kannst dir auch alle Branches herunterladen. Du kannst dir auch alle Tags herunterladen.

# Lädt alle Änderungen aus einem Remote Repository herunter und übernimmt diese in deinen lokalen Branch
git pull <Remote> <Branch>
# Lädt alle Branches aus einem Remote Repository herunter und übernimmt diese in deinen lokalen Branch
git pull <Remote> --all
# Lädt alle Tags aus einem Remote Repository herunter und übernimmt diese in deinen lokalen Branch
git pull <Remote> --tags

Fazit

Das waren die wichtigsten Git Befehle. Ich hoffe, dass ich dir mit diesem Artikel weiterhelfen konnte. Wenn du noch Fragen hast, kannst du mir gerne auf Twitter schreiben. Ich wünsche dir noch einen schönen Tag. Bis zum nächsten Mal. 👋

Weitere Blog Artikel