Wird ein neuer Branch erstellt:
<Remote>/<Branch>
Stadium | Wo | |
---|---|---|
Modified | Working-Directory | Die Datei wurde geändert, aber git wurde darüber noch nicht informiert. Das Working Directory ist das Verzeichnis in dem der ausgecheckte Code „lebt“ und wo man ihn modifiziert |
Staging | Staging-Area | Die Datei wurde per „git add“ zum commit vorgemerkt. Staging Area ist eine Datei im .git-Unterverzeichnis. git status zeigt den Stand der Modifikationen an. git diff –cached die Änderungen gegenüber der bereits commiteten Version |
Commited | .git-Directory/Repository | Die Änderungen wurden ins Repository übertragen und sind permanent gespeichert. git commit erledigt das. Die Dateien liegen in der Verzeichnisstruktur unterhalb des Unterverzeichnis .git |
Syntax:
git clone <URL> [directory]
Dateien im Repository-Verzeichnis werden nicht automatisch auf Änderungen hin überwacht.
Erst wenn sie per git add <Dateiname> zum tracking hinzugefügt wurden überwacht sie git.
Überwachen heißt das es bei einem commit weiß das die Datei geändert wurde und darauf hinweist, wenn sie nicht zu Staging hinzugefügt wurde (und damit nicht Teil des commits wird).
Um eine Datei die bereits getrackt wird zum staging hinzuzufügen benutzt man ebenfalls git add <Dateiname>.
Syntax:
git add <Dateiname>
Der Befehl unterstützt auch Wildcards.
Ohne Parameter → Unterschied zwischen Working-Directory und staging.
Mit Parameter
--cache
→ Unterschied zwischen staging und Repository.
Syntax:
git commit
Optionen:
Option | Beschreibung |
---|---|
-m | Message. Bei jedem Commit muss eine kurze Beschreibung der Änderungen angegeben werden. Normalerweise wird dazu interaktiv ein Editor geöffnet. Mit „-m“ kann die Nachricht gleich hinter der Option angegeben werden |
-a | Überspringt das staging-Area. Mit der Option werden alle geänderten und getrackten Dateien automatisch gestaged und commited - der Umweg über git add fällt weg - es lassen sich aber dadurch auch keine Dateien selektiv zum zum commit hinzufügen oder weglassen. |
--amend | Überschreibt den letzten Commit mit einem neuen commit. Sinnvoll wenn man beim eigentliche commit zum Beispiel Dateien vergessen hat oder die Beschreibung falsch war. |
Entferne Dateien komplett oder nur aus dem Tracking und damit aus dem Repository.
Syntax:
git rm <Dateiname/Verzeichnisname>
Ohne Optionen wird die Datei aus dem Dateisystem und aus dem Tracking und damit aus Staging und damit aus zukünftigen commits entfernt.
Option | Beschreibung |
---|---|
–cached | Löscht die Datei nur aus dem Tracking und damit aus zukünftigen adds zu Staging und commits. Die Datei bleibt aber im Dateisystem vorhanden |
-f | Wurde die Datei bereits zu Staging via git add hinzugefügt und nicht commited, kann mit -f erzwungen werden das sie aus Staging herausgenommen wird |
Verschiebt/benennt eine Datei im Working Directory um und git bekommt es mit.
Grundsätzlich könnte man auch das normale mv/verschieben nehmen und die Datei per git rm unter altem Namen löschen und mit git add unter neuem Namen wieder hinzufügen und git wüsste in der Regel immer noch das es die gleiche Datei ist.
Zeigt den Veränderungsverlauf der eingecheckten/commitetten Daten.
Per Default wird nur eine Zusammenfassung angezeigt und die Prüfsumme des Commits an.
Option | Beschreibung | ||||||||
---|---|---|---|---|---|---|---|---|---|
-p | Patch - Zeigt zusätzlich die Veränderungen im Code an (in der Form wie patch sie ausgibt) | ||||||||
–stat | Zeigt eine Verkürzte Statistik für jedes Commit an | ||||||||
–pretty | Erlaubt erweiterte Formatierung und benutzerdefinierte Formatierung der Ausgabe
Syntax: git log –pretty=<Option>
^Option ^Beschreibung ^
|
||||||||
--graph | Graphische Darstellung, die Branches inkludiert. Kann mit den anderen Optionen kombiniert werden |
Filtern:
Option | Beschreibung |
---|---|
-n | Die letzten -n Commits - n ist eine Zahl |
--since/--after | Gebe nur commits aus die nach dem definierten Datum gemacht wurden. Wobei Datum hier kein Datum sein muss, auch sowas wie '2007', '10.y','10 years' funktioniert |
--until/--before | Zeige nur commits an die vor/bis zu einem bestimmten Datum eingecheckt wurden. Die Syntax ist die gleiche wie --since |
--author | Filtert nach einem bestimmten Autor |
--grep | Sucht im commit-String nach einer Zeichenkette |
--all-match | Wurden mindestens ein --grep und mindestens ein --author
angegeben, wird das als OR-Betrachtet - es muss also nur ein Kriterium zutreffen damit das Commit angezeigt wird. --grep
-Optionen angezeigt werden. --all-match ändert das in AND |
Nimmt eine Datei die gestaged wurde aus dem Staging-Area.
Syntax:
git reset HEAD <Dateiname>
Es kann sein, dass man eine Datei in Staging geadded hat die (noch) nicht commited werden soll z.B.
Managed Remote-Repositories.
Ohne Option listet es die Remote-Repository.
Nach git clone gibt es ein Remote-Repository namens „origin“, das ist das von dem gecloned wurde.
Syntax:
git remote add <Kurzname> <URL>
Details über das Remote-Repository (u.a. welche Branches existieren usw.).
Syntax:
git show <Remote>
Umbenennen des Kurznamens für ein Remote-Repository.
Syntax:
git remote rename <Alter-Name> <Neuer-Name>
Entfernen eines Remote-Repository
Syntax:
git remote rm <Remote>
Syntax:
git fetch <Remote>
Syntax:
git pull <Remote>
Syntax:
git push <Remote> <branch>
Annotation Tag:
Syntax:
git tag -a <Tag> -m <Commentar>
Leightweight Tag:
Syntax:
git tag <Tag>
Syntax:
git tag -a <Tag> <Commit-Prüfsumme>
Ein einzelnes Tag hochladen: Syntax:
git push <Remote> <Tagname>
Alle Tags pushen:
Syntax:
git push <Remote> --tags
Listet die Tags auf.
Syntax:
git tag -l
Man kann auch Wildcards benutzen, um nur Tags anzuzeigen die mit einer bestimmten Zeichenfolge beginnen:
Beispiel:
git tag -l 19.*
Syntax:
git tag -d <Tag>
Syntax:
git checkout <Tag>
Branches listen:
git branch
Der Branch mit dem führenden * ist der aktuelle (im Working-Directory befindliche) Branch
Branche erstellen:
git branch <Name des Neuen Branches>
Obiges erstellt einen neuen Branch basierend auf dem aktuellen Head (dem Stand der durch das letzte Commit im aktuellen Branch entstandenn ist) unter dem angegebenen Namen.
Achtung: Es wird nicht in den neuen Branch gewechselt - der Inhalt des Working Directory ist immer noch der alte Branch.
Technisch gesehen wird erstmal nur ein Zeiger mit dem Namen des neuen Branches erstellt, der auf die Position des letzten Commits des Branches verweist aus dem er hervorgegangen ist.
Branch umbenennen:
git branch -m <Alter Name> <Neuer Name>
-m steht für move.
Branch löschen:
git branch -d <Branchname>
Letzten Commit für alle Branches anzeigen:
git branch -v
Alle gemergten Branches anzeigen (alle die die auf den gleichen Commit zeigen - dazu zählen auch die die noch gar nicht geändert wurden):
git branch --merged
Alle nicht gemergten Branches anzeigen (alle die nicht auf den gleichen Commit wie der aktuelle Branch) zeigen:
git branch --no-merged
Branch auschecken:
git checkout <Branchname>
Mit dem auschecken eines Branches wird dieser der aktive Branch - anschließende Commits werden in diesen gemacht
Commit auschecken:
git checkout <Commit-Checksumme>
Achtung: Oben stehende Methode checked in den aktuell aktiven Branch aus → Commits werden diesem hinzugefügt
Commit auschecken und neuen Branch mit diesem Beginnen:
git checkout -b <Commit-Checksum> <Branch-Name>
In diesem Fall wird auch gleich in den entsprechenden Branch gewechselt
Syntax:
git merge <Branch>
Es kann passieren das es einen Merge-Konflikt gibt, weil einige Dateien in beiden Branches geändert wurden vor der Zusammenführung.
In diesem Fall schlägt das mergen fehl, die entsprechenden Dateien enthalten an den Stellen wo es den Konflikt gibt entsprechende Markierungen und den Inhalt beider Dateien.
Nach dem sich für eine der beiden Versionen entschieden wurde oder eine ganz neue Lösung gefunden wurde, müssen die Markierungen und der überflüssige Code gelöscht werden, danach wird normal commited.
Syntax:
git mergetool
git rebase -i <Basis>
Basis:
Beispiel:
*test.py *[ao].py
Ignoriert alle Dateien die auf test.py enden oder auf a.py oder o.py enden.
Folgende Zeichen haben neben den üblichen Wildcards eine spezielle Bedeutung:
Zeichen | Bedeutung |
---|---|
/ |
|
! | Negiert den Ausdruck |
Unterstützte Glob-Pattern:
Pattern | Beschreibung |
---|---|
* | Eine beliebige Menge beliebiger Zeichen |
? | Ein beliebiges Zeichen |
[ZeichenZeichenZeichen] | Liste von möglichen Zeichen die an der Stelle stehen können |
[Zeichen-Zeichen] | Bereich von Zeichen die an der Stelle stehen können |
** | Wendet es auf alle Unterverzeichnisse und Unterverzeichnisse an - steht für eine beliebig tiefe Verzeichnisstruktur |