Git Cheatsheet
Git ist eine Versions-Verwaltung für Dateien und Software-Dokumente und wird von Entwicklern genutzt,
bei der Software Entwicklung den Datei-Verlauf zu verwalten. Auch in vielen
static sites
wird git eingesetzt.
git installieren
Ubuntu
sudo add-apt-repository ppa:git-core/ppa
sudo apt update && sudo apt install -y git
Windows
- Git von der Webseite herunterladen
- Installation durchführen
Ein Repository erstellen
Will man ein Repository mit git erstellen hat man dabei primär 2 Optionen:
- man erstellt ein neues Repo
- man nutzt ein vorhandenes aus einer Remote Verwaltung
git init - ein neues repo erstellen
Erstellt ein neues Repo in einem Ordner.
$ mkdir my-project
$ cd my-project
$ git init
Hat man bereits einen Ordner mit Dateien, kann man diesen ebenfalls nutzen:
$ cd /path/to/my-project
$ git init
In dem Ordner wurde ein Verzeichnis .git
erstellt.
zufügen eines remote Host für die git Verwaltung
Um das Git Repo über mehrere PCs zu verwenden kann man eine Remote Verwaltung zufügen. Das kann zum Beispiel ein Drittanbieter sein wie Bitbucket oder Github , man kann aber auch einen eigenen Git-Server betreiben mit Gitolite oder (wenn man mehr als nur Repos hosten will) Gitea .
$ git remote add origin git@host.de:path/to/ui.git
Die URL am Ende des Commands ist dabei die URL zum Git Repo. Man kann hier sowohl SSH
einsetzen (wie im Beispiel) als auch https
$ git remote add origin https://bitbucket.org/path/to/ui.git
bare
Ein “nacktes” Repository, das mit git init --bare
erstellt wurde, ist
Beispielsweise für das Teilen von Dateien. Wenn man mit einem Team von
Entwicklern zusammenarbeitet und einen Ort benötigt, an dem man Änderungen
an einem Repository freigeben kann, sollte man ein nacktes Repository
an einem zentralen Ort erstellen, an dem alle Benutzer ihre Änderungen
übertragen können (oft ist die einfache Wahl github).
Da git ein verteiltes Versionskontrollsystem ist, wird niemand direkt Dateien
im freigegebenen zentralen Repository bearbeiten. Stattdessen klonen Entwickler
das freigegebene bare
Repository, nehmen Änderungen lokal in ihren Arbeitskopien
des Repository vor und schieben die geänderten Dateien dann zurück zum freigegebenen
blanken Repository, um ihre Änderungen anderen Benutzern zur Verfügung zu stellen.
Bare repos werden damit überwiegend auf Git Servern eingesetzt.
$ mkdir my-bare-project
$ cd my-bare-project
$ git init --bare
git clone - ein vorhandenes Repo nutzen
Nicht immer will man ein neues Repo erstellen, sondern auch vorhandene
holen. Dafür stellt git den Command clone
bereit.
$ git clone https://bitbucket.org/path/to/ui.git ui
Dabei wird das Remote Repo in den Ordner ui geklont. Will man den aktuellen
Ordner verwenden, kann man das ui
am Ende auch weglassen.
Git clone ist im Prinzip der schnellere Ersatz für
$ git init
$ git remote add origin https://bitbucket.org/path/to/ui.git
$ git pull origin master
git add
Fügt eine einzelne Datei, ein Verzeichnis, mehrere Dateien/Verzeichnisse oder alle Änderungen hinzu.
Hinzufügen aller Dateien
git add .
Hinzufügen einer Datei
git add pfad/zu/file.php
Hinzufügen eines Verzeichnisses
git add pfad/zu/verzeichnis
Optionen
Testen ob das Hinzufügen funktioniert
Einen Probelauf um auf eventuelle Fehler für add zu testen kann man
mit der Option --dry-run
oder kurz -n
ausführen. Durch den Probelauf
wird vorerst nichts geändert/hinzugefügt. Sollten Fehlermeldungen
ausgegeben werden, hat man die Möglichkeit, diese erst zu beheben,
bevor man im Nachhinein die Fehler mühselig Rückgängig machen muss.
git add . --dry-run
Entfernen von Dateien/Verzeichnissen aus dem Repo
Entfernen einer Datei aus dem Git Repo
Um eine Datei aus dem Git Repo zu löschen kann man den Command
git rm path/to/file.ext
verwenden. Der Pfad kann dabei relativ oder absolut sein. Will man die Datei selbst lokal behalten, hilft einem die Option --cached
.
git rm --cached path/to/file
Damit wird die Datei aus dem index entfernt, selbst aber nicht gelöscht.
Entfernen eines Verzeichnisses
git rm -r --cached path/to/dir-to-delete
git commit
Übermitteln von Änderungen an die Versions-Kontrolle. Ein Commit
erfordert, dass zuvor die geänderten Dateien des commit mit
git add
oder git rm
hinzugefügt/zum löschen Markiert wurden.
git commit -m "Commit Nachricht kommt hier..."
Optionen für die Commit Beschreibung
-m [message]
–message [message]
Setzen der Commit Beschreibung. Wenn mehrere -m Optionen angegeben wurden, werden deren Werte als separate Paragraphen kombiniert.
Beispiel:
git commit -m"Commit Beschreibung hier..."
-F [filename]
–file [filename]
Lesen der Commit Beschreibung aus der angegebenen Datei.
Beispiel:
git commit -F /home/me/current-commit.txt
–author [author]
Überschreibt den Autor eines Commits auf einen bestimmten Namen
Beispiel:
git commit -m"Commit Beschreibung hier..."
--author "Karl Gustav"
–date [datum]
Überschreibt das Datum eines Commits auf einen bestimmten Zeitpunkt. Mehr über die unterstützten Formate findest du hier .
Beispiel:
git commit -m "Commit Beschreibung hier..."
--date "2017.12.27"
git reset
Tool zum Zurücksetzen von Änderungen im working tree oder auch ganzer Commits.
Zurücksetzen aller lokalen Änderungen
# Zurücksetzen aller veränderten Dateien
git reset --hard
# Entfernen aller nicht versionierten Dateien und Verzeichnisse,
# die noch nicht via git add zugefügt wurden
git clean -fd
# Pull um aktuelle Commits aus dem Remote zu holen
git pull origin master
Zurücksetzen eines Commit, der noch nicht via push übertragen wurde
# Zurücksetzen aller verändeten Dateien im Commit auf den vorigen Status
git reset --hard HEAD~1
# Entfernen aller nicht versionierten Dateien und Verzeichnisse,
# die noch nicht via git add zugefügt wurden
git clean -fd
# Pull um aktuelle Commits aus dem Remote zu holen
git pull origin master
Zurücksetzen mehrere Commits
Um mehrere Commits rückgängig zu machen, kann man die gleiche Prozedur
durchziehen wie im vorigen Punkt. Einzige Änderung wäre, dass man
anstelle von HEAD-1
den Commit angibt:
git reset --hard 4564150952
4564150952
entspricht dabei den ersten Ziffern des Commit.
Zur Erinnerung: die Commits kann man sich mit Hilfe von
git log --pretty=oneline
auflisten lassen.
git tag
Git Tags sind im Prinzip Versions-Punkte in der Entwicklung, die z.B. als Release gepackt werden. Tags können direkt ausgecheckt werden.
einen Tag erstellen
# Erstellt den Tag v1.1.0 mit entsprechender Commit Message
git tag -a v1.1.0 -m "Tagging Version v1.1.0"
# Übermittelt den Tag
git push origin v1.1.0
Auf einem anderen PC kann man dann die Tags holen mit
git pull origin --tags
einen Tag basierend auf einem Commit erstellen
Zuerst kann man sich die Commit Nachrichten über
git log --pretty=oneline
tag checkout
Tags kann man via checkout vom Remote Host holen:
git checkout v1.1.0
Auflisten vorhandener Tags
Um alle Tags aufzulisten, kann man einfach
git tag
aufrufen. Will man jedoch alle Tags zu bestimmten Sub-Releases erhalten, kann man die durch
git tag -l "v1.1.*"
bekommen.
Zu einem Major Release könnte der Command wie folgt aussehen:
git tag -l "v1.*"
git submodule
Hier habe ich ein separates Cheatsheet für Submodule.
git subtree
Hier habe ich ein separates Cheatsheet für Subtree.
Zusatz-Informationen
Git Datum Format
Die GIT_AUTHOR_DATE
, GIT_COMMITTER_DATE
Umgebungs-Variablen sowie die
<code>--date</code>
Option unterstützen die folgenden Datum Formate:
- Git internal format
Das interne Format setzt sich aus
<unix timestamp>
<time zone offset>
zusammen. Dabei ist<unix timestamp>
die Anzahl an Sekunden seit der UNIX-Epoche.<time zone offset>
ist ein positives oder negatives Offset von derUTC
Zeitzone. z.B.MESZ
(diese hat 2 Stunden mehr alsUTC
) is+0200
. - RFC 2822
Das Standard E-Mail Format wie es in der RFC 2822 beschrieben wird, z.B.
Thu, 07 Apr 2020 22:13:13 +0200
. - ISO 8601
Zeit und Datum wie es in der ISO 8601 festgelegt ist, z.B. 2020-04-07T22:13:13. Der Parser akzeptiert auch ein Leerzeichen (space) anstelle des
T
Character.