Dieses Cheat Sheet soll die Benutzung von Git als Versionsverwaltung erleichtern. Dafür stellt es die wichtigsten Kommandos dar. Git kann hier heruntergeladen werden. Im folgenden sind die Befehle grob nach ihrem Anwendungsfall gegliedert.

 

Git Grundlagen

git init <dir>
Erstellt eine leere Git-Repository in dem angegebenen Verzeichnis. Wird es ohne das Argument <dir> ausgeführt erstellt es die Repository im aktuellen Ordner.
git clone <repo>
Klont eine Repository die sich unter <repo> befindet auf das lokale Gerät. Die Repository kann entweder auf dem lokalen Dateisystem liegen oder auf einem Remotecomputer unter HTTPS oder SSH.
git config user.name <name>
Definiert den Autornamen, der für alle Commits in der aktuellen Repo genutzt wird. Als Entwickler nutzt man normalerweise das –global Flag um seinen Autorennamen systemweit zu setzen.
git add <dir>
Setzt alle Änderungen in in den nächsten Commit. <dir> kann auch eine Datei sein. Diese wird dann ebenfalls in die Änderungsliste eingetragen.
git commit -m "<message>"
Commited den aktuellsten Stand mit <message> als Commit-Nachricht.
git status
Gibt eine Liste aus mit allen Änderungen, sortiert nach staged, unstaged und untracked.
git log
Zeigt die gesamte History aller Commits in Standardformat an. Es kann durch Parameter die Ausgabe formatiert werden.
git diff
Zeigt die Änderungen, die noch nicht commited sind, an.

Änderungen rückgängig machen

git revert <commit>
Erzeugt einen Commit, welcher die Änderungen des <commit>-Commits rückgäng macht und diesen Commit dann auf die aktuelle Branch anwendet.
git reset <file>
Entfernt die Datei aus der Liste der von Git verwalteten Dateien.
git clean -n
Zeigt an, welche Dateien aus dem Arbeitsverzeichnis entfernt werden. Wird das -f Flag anstatt des -n gesetzt so werden die Dateien wirklich entfernt.

Die Git-History nachträglich verändern

git commit --amend
Ersetzt den letzen Commit mit einem neuen Commit. Werden dabei keine Änderungen übertragen, so ändert dieser Befehl nur die Commit-Message.
git rebase <base>
Führt ein Rebase aus, d.h. die aktuelle Branch wird geändert. Die neue Branch kann entweder ein Branch-Name sein, eine Commit-ID, ein Tag oder eine relative Referenz zu HEAD.
git reflog
Zeigt einen Log der Änderungen zum lokalen Repository-HEAD. Fügt man –relative-date an, so erhält man Datumsinformationen, –all zeigt alle Referenzen.

Git Branches

git branch
Listet alle Branches der Repository auf. Wird ein <branch> hinten angehängt so wird eine neue Branch mit entsprechendem Namen erzeugt.
git checkout 
-b <branch>
Erzeugt (falls nicht vorhanden) und checkt eine neue Branch aus. Wird das -b weggelassen, so wird keine neue Branch erzeugt sondern eine bereits vorhandene ausgecheckt.
git merge <branch>
Führt die Branch <branch> in die aktuelle Branch zusammen.

Remote-Repositories

git remote add 
<name> <url>
Erstellt eine Verbindung zu einer Remote-Repository. Nachdem die Remote-Repo hinzugefügt wurde kann man <name> anstatt <url> als Referenz in den anderen Kommandos benutzen.
git fetch <remote> 
<branch>
Holt die Branch aus der Remote-Repository.  Wird <branch> weggelassen, so werden alle Branches geholt.
git pull <remote>
Holt die Remote-Kopie der aktuellen Branch und merged (Zusammenführen) sie mit der lokalen Kopie.
git push <remote> 
<branch>
Schiebt alle lokalen Änderungen/Commits auf die Remote Branch. Existiert die Branch nicht, wird sie angelegt.

Git Konfiguration

git config --global 
user.name <name>
Setzt den Autorennamen für alle Commits des aktuellen Benutzers.
git config --global 
user.email <email>
Setzt die Email-Adresse, die für alle Commits des aktuellen Benutzers genutzt wird.
git config --global
alias.<alias-name> 
<git-command>
Erzeugt einen Shortcut für ein Git-Kommando. Bspw. alias.glog log –graph –oneline setzt git glog als Alias zu git log –graph –online.
git config --system 
core.editor <editor>
Setzt den Texteditor der für alle Kommandos genutzt wird, bei denen ein solcher benötigt wird. (Bei IDE-Einsatz kann das meist ignoriert werden).
git config --global 
--edit
Öffnet die Globale Konfigurationsdatei in einem Texteditor damit man manuelle Änderungen vornehmen kann.

Git Log

git log -<limit>
Limitiert die Anzahl der angezeigten Commits auf <limit>.
git log --oneline
Komprimiert jeden Commit auf eine Zeile.
git log -p
Zeige die kompletten Änderungen für jeden Commit.
git log --stat
Zeigt auch an, welche Dateien um wie viele Zeilen erweitert oder verkürzt wurden.
git log 
--author="<pattern>"
Zeigt nur die Commits eines bestimmten Autors
git log 
--grep="<pattern>"
Zeigt nur Commits, bei denen in der Commit-Nachricht <pattern> vorkommt.
git log 
<since>..<until>
Zeigt nur Commits, die zwischen <since> und <until> commited wurden. Dabei sind Commit-IDs, Branch-Namen, HEAD und jede andere Art von Versionsreferenz erlaubt
git log --<file>
Zeigt nur die Commits an, die auf einer bestimmten Datei passiert sind.
git log 
--graph --decorate
–graph zeichnet einen textbasierten Graphen der Commits auf der linken Seite der Commit-Nachrichten. –decorate fügt die Namen der Branches und Tags hinzu.

Git Diff/Änderungen

git diff HEAD
Zeigt die Änderungen zwischen der aktuellen lokalen Version und dem letzen Commit.
git diff --cached
Zeigt die Änderungen zwischen staged-Änderungen und dem letzen Commit.

Git Reset

git reset
Macht die aktuellen, lokalen Änderungen rückgängig auf den letzten Commit.
git reset --hard
Wie oben, nur dass hier tatsächlich geänderte Dateien im Dateiverzeichnis wirklich überschrieben werden und nicht nur wie oben, alle gestageten Änderungen.
git reset 
<commit>
Verschiebt den HEAD (Kopf/Tip) der aktuellen Branch zurück auf <commit>. Verändert das Arbeitsverzeichnis aber nicht.
git reset 
<commit> --hard
Wie oben, nur dass hier auch das Arbeitsverzeichnis zurückgeschrieben wird. Alle Commits nach werden gelöscht.

Git Rebase

git rebase -i <base>
Rebased die aktuelle Branch auf Branch <base> . Dafür wird ein Editor geöffnet, in dem eingetragen wird, wie jeder einzelne Commit der aktuellen Branch auf die andere Branch übertragen werden soll.

Git Pull

git pull 
--rebase <remote>
Holt sich die Remote-Kopie der aktuellen Branch und rebased sie auf die lokale Kopie. Mit git rebase anstatt merge werden dann die Branches integriert.

Git Push

git push <remote> 
--force
Erzwingt git push, selbst wenn ein normales Zusammenführen nicht ganz möglich ist. –force sollte nur genutzt werden, wenn man genau weiß, was man tut.
git push <remote> 
--all
Pusht alle lokalen Branches in das Remote-Repo.
git push <remote> 
--tags
Tags werden nicht automtatisch mitgepusht. Lokale tags werden erst mit –tags an die Remote-Repo mitgesendet.