Git HowTo

Hier findest du einige wichtige Befehle vom Versionsverwaltungssystem Git, welche im Alltag eigentlich immer gebraucht werden.

Für darüberhinaus gehende Infos zu Git empfehle ich die Englische Git Dokumentation oder das GitHub Git Cheat Sheet

Inhaltsverzeichnis

Repository Clonen (Spiegeln/Downloaden)

Um ein Git Repo von einem Server herunterzuladen (clonen) benötigt man nur die URL vom Repo (https://... für HTTP Verbindungen oder git@... für Verbindungen über SSH). Im Git Terminal dazu einfach git clone [Repo-URL] eingeben und das Repo wird in einem Unterordner des aktuellen Ordners der Konsole geclont. Beispielhaft nehmen wir mein Homepage Repo, welches unter der Adresse https://git.unbk.me/unbekannt3/Homepage.git zu finden ist und clonen dieses mit dem Befehl git clone https://git.unbk.me/unbekannt3/Homepage.git in den Ordner „Homepage“

Falls der lokale Ordner, in den das Repo hinein geklont werden soll, ein anderen Name als der auf dem Git Server verwenden soll, kann mittels git clone [Repo-URL] [Name] ein eigener Ordnername festgelegt werden. Beispiel wie oben: git clone https://git.unbk.me/unbekannt3/Homepage.git MeineSeite. Damit wird mein Homepage Repo nun in den Ordner „MeineSeite“ geklont.


Pull – Aktualisierungen von Server herunterladen

Mit einem git pull können auf dem Git-Server vorhandene Änderungen im Repo lokal übernommen werden. Dies ist nötig, wenn man Änderungen im lokalen Repo vorgenommen hat und diese auf den Server hochladen möchte, aber lokal nicht mehr auf dem neusten Stand vom Server ist (z.B. durch Fremde Veränderungen).

Ist ein git pull durch lokale Änderungen nicht möglich müssen diese entweder commitet werden oder durch ein git stash verworfen werden.


Commit

Mit einem git commit -m "Nachricht" können Änderungen im Repo „gespeichert“ werden. Dazu müssen vorher alle gewünschten Änderungen zur Stage hinzugefügt werden. Dies passiert mit einem git add [Dateiname] oder einem git add . um alle Änderungen zur Stage hinzuzufügen.

Commits müssen mit einer Nachricht versehen werden – am besten mit einer passenden Beschreibung des Inhalts – um später z.B. bei Fehlern schneller den fehlerhaften Commit zu finden.


Push – Auf Server hochladen

git push wird dazu verwendet um lokal commitete Änderungen auf einen Git Server zu übertragen. Standardmäßig wird dazu der aktuelle lokale Branch auch auf dem Server gewählt (falls vorhanden). Falls die automatische Auswahl nicht klappen sollte – oder auf dem Server in einen anderen Branch hochgeladen werden soll als Lokal gearbeitet wurde – kann mit einem git push -u [Server (meistens als "origin" eingetragen)] [Branch auf Server] der entfernte Branch gewählt werden, auf welchen die lokalen, noch nicht gepushten, commits hochgeladen werden.+

Möchte ich z.B. von meinem akutellen lokalen Branch auf den Branch „featureX“ am Server hochladen so geht dies mit git push -u origin featureX


Branching

Ein Branch – dt. Zweig – ist ein Zweig im Repo (meistens vom master-Branch). In diesem Zweig kann in einem Repo quasi völlig voneinander getrennt gearbeitet werden, ohne das man beim pushen von Commits Probleme durch andere Commits auf dem Server bekommt.

Wir nehmen an du bist momentan im Branch master und möchtest jetzt in den Branch jframetest wechseln. Dazu gibst du in das Git CLI git checkout jframetest ein. Dir sollte jetzt in Klammern hinter dem aktuellen Git Ordner der neue Branch angezeigt werden.

Um einen Branch zu erstellen benötigt man den Befehl git branch [Name des neuen Branches]. Möchte man den Branch wechseln kann man dies mit git checkout [Branch] tun. Dadurch, dass man sehr wahrscheinlich einen neu erstellten Branch auch direkt benutzen will, kann man den Branch auch über den checkout Befehl anlegen, welcher dann einen direkten wechsel im Anschluss bewirk: git checkout -b [Name des neuen Branch]

Möchtest du einen Branch löschen kannst du dies einfach mit git branch -d [Name] erledigen. Am Beispiel „jframetest“ wäre das dann git branch -d jframetest.


Zusammenführen (merging) von Branchen

Um Code von einem Branch in einen anderen zu bekommen ist ein „merge“ nötig. Diesen kannst du entweder mit der WebGUI von GitHub (Pull request)/GitLab (Merge request) machen oder auch über das Git CLI.

Merging in dem Git CLI: Wir nehmen an du hast einen Branch jframetest, arbeitest gerade in diesem und möchtest den commiteten Code nun in den master-Branch kopieren. Dazu wechselst du zuerst in den Zielbranch mit dem Befehl git checkout master. Jetzt kannst du einfach mit git merge jframetest den kompletten Inhalt aus jframtest in master kopieren.


Mergekonflikte beheben

Sollte bei einem mergeversuch ein „Mergekonflikt“ auftreten, kann Git bei mindestens einer Dateien die Änderungen nicht automatisch Zusammenfügen. Dies passiert dann, wenn in beiden Branches an der Datei gearbeitet wurde und somit mindenstens 2 verschiedene Versionen dieser Datei existieren. Git weiß dann nicht mehr, welche Änderungen wie in diese Datei(en) kopiert werden soll und bricht den Merge mit einer Fehlermeldung ab. Die Fehlerhaften Dateien müssen dann manuell zusammengefügt werden.

Dies ist z.B. bei Github oder Gitlab meistens direkt über das Webinterface möglich, mit einem git status kann man sich aber die fehlerhaften Dateien anzeigen lassen und diese dann z.B. mit einem Texteditor wie Notepad++ (nicht Word oder andere Office Suites!) manuell bearbeitet werden.

Nachdem die Dateien Manuell bearbeitet wurden müssen diese wieder commitet werden. Dazu einfach ein git add . und ein git commit -m "fix mergeconflict" ausführen. Danach kann dann mit einem git push das merging beendet werden.


Hast du weitere Wünsche oder Vorschläge für dieses HowTo? Schreib mir per Mail an support@unbekannt3.eu oder eröffne ein Support Ticket unter support.unbekannt3.eu 🙂