Dies ist eine alte Version des Dokuments!
Git - Kurzeinführung
Kurzübersicht der Befehle der Versionsverwaltung Git
(Es wird dabei von einem lokalen Repositoy und einem entfernten Repository ausgegangen)
Git arbeitet mit drei Stufen:
- Arbeitsverzeichnis/-kopie (Working directory); hier werden die Dateien vom Entwickler bearbeitet
- Index (Stage); hier wird sich der Zustand einer Datei gemerkt, in welchem der commit erfolgt
- Repository; Die „Datenbank“ der Versionsverwaltung
git add macht die Dateien dem Index bekannt, git commit überführt die Dateien, welche im Index sind, ins Repository und setzt den HEAD auf den letzten commit.
Achtung! Wenn eine Datei nach einem add noch verändert wurde und dann ein commit durchgeführt wird, so landet die Datei in dem Zustand im Repository, in welchem dass add durchgeführt wurde, also nicht(!) im Neusten!
Ein lokales Repository erstellen (in einem beliebigen, auch leerem, Verzeichnis):
git init
Ein entferntes Repository clonen (lokale Kopie erzeugen):
git clone benutzername@host:<Absoluter Pfad zum Repository>
Einen Branch ausschecken (dabei werden Änderungen, welche noch nicht committed wurden, verworfen):
git checkout <branch>
Lokale Änderungen verwerfen, welche bereits committed wurden:
git reset --hard <origin/branch>
Dateien einem lokalen Repository (genauer Index) bekanntmachen:
git add <Dateiname>
oder für alle Dateien:
git add .
Dateien dem lokalen Repository hinzufügen:
git commit -m "<Beschreibung des commit>"
Hat man bei einem commit eine Datei vergessen, so kann man diese dem commit nachträglich hinzufügen:
git commit -m 'Mein commit bei dem eine Datei fehlt' git add <fehlende Datei> git commit --amend
Ein Update durchführen (entspricht einem git fetch mit anschließendem git merge):
git pull <remote> <branch>
Übertragen der lokalen Änderungen in das entfernte Repository:
git push <remote> <branch>
Die lokalen Änderungen einer Datei rückgängig machen:
git checkout -- <file>
Alle lokalen Änderungen rückgängig machen:
git checkout -- .
Zurücksetzen von HEAD auf einen älteren Branch (somit ist dieser dann aktuell):
git reset --hard <hash>
Alle Branches auflisten (aktueller Branch ist mit einem Sternchen versehen):
git branch
Auch Git erlaubt das taggen:
(Der Hash lässt sich übrigens mit dem log-Befehl ermitteln)
git tag 1.0.00 <hash>
Das Git eigenen Log kann natürlich auch eingesehen werden:
git log
Das Log lässt sich auch grafisch aufbereiten:
gitk
Git konfigurieren
Dafür sorgen, dass sich die bereits gemergten Teile gemerkt werden:
(reuse recorded resolution)
git config --add rerere.enabled true
Die eigene Identität festlegen (global):
$ git config --global user.name "Peter Mayer" $ git config --global user.email peter.mayer@example.com
Ein Diff-Tool (hier: vimdiff) festlegen (global):
$ git config --global merge.tool vimdiff
Beispielhafter Workflow mit zwei Entwicklern
Nennen wir die beiden A-User und B-User.
Diese arbeiten auf einem gemeinsamen Branch namens develop.
A-User macht Änderungen an einer Datei und commited diese.
B-User macht ebenfalls Änderungen, aber an einer anderen Datei.
B-User commited und pushed.
A-User möchte nun commiten, der Versuch wird aber rejected, obwohl B-User an anderen Dateien gearbeitet hat. Daher muss A-User erst mit einem
git fetch origin
sein Repository auf den neusten Stand bringen. Anschließend führt er einen Merge mit
git merge origin/develop
durch. Nun kann A-User seine Änderungen
git push
ins remote Repository übertragen,.