Git Hands On Aufgabe
Schritt 1: Initialisiere ein Git-Repository
- Öffne dein Terminal oder die Kommandozeile.
- Erstelle ein neues Verzeichnis.
- Navigiere in das gerade erstellte Verzeichnis.
- Initialisiere ein neues Git-Repository.
1 2
git init git status
Schritt 2: Erstelle eine konfliktverursachende Datei
- Erstelle eine neue Datei mit dem Namen
index.txt
und füge einen Satz hinzu. - Speichere die Datei und committe die initiale Version.
1 2
git add index.txt git commit -m "Add index.txt"
Schritt 3: Erstelle einen neuen Branch und mache Änderungen
- Erstelle einen neuen Branch mit dem Namen
feature/my-cool-feature
.1 2
git branch feature/my-cool-feature git switch feature/my-cool-feature
- Öffne die
index.txt
Datei und ändere den Inhalt. Die Änderung soll dabei auf der gleichen Zeile sein wie den Satz den du zuvor hinzugefügt hast. Z.B.Mein Satz
zuMein viel besserer Satz
. - Speichere die Datei.
Schritt 4: Änderungen im Feature-Branch stashens
- Bevor du den Feature-Branch in den Master-Branch mergst, stashe zuerst die Änderungen.
1 2
git stash save "My stashed changes" git stash list
Schritt 5: Konfliktverursachende Änderungen auf Master hinzufügen
- Wechsle zurück zum
master
-Branch. - Öffne die
index.txt
Datei und ändere den Inhalt. - Speichere die Datei und committe die Änderungen.
1 2
git add index.txt git commit -m "Changed something in index.html"
Schritt 6: Änderungen aus dem Feature-Branch in den Master-Branch picken
Übernimm nun den letzten Commit aus dem Feature-Branch in den Master-Branch, mithilfe von cherry-pick
.
Mit
git log --oneline
den letzten Commit-Hash anzeigen, in diesem Fall wäre dasea95358
.1 2
6238890 (HEAD -> master) Changed something in index.html ea95358 (feature/my-cool-branch) Added index.txt
Danach die Änderungen aus dem Feature-Branch cherry-picken.
1 2
git log --oneline git cherry-pick <COMMIT-HASH>
Wenn alles richtige gemacht wurde, erscheint danach eine Warnung über einen Merge-Konflikt.
1 2 3 4
Auto-merging index.txt CONFLICT (add/add): Merge conflict in index.txt error: could not apply ea95358... Added index.txt ...
Schritt 7: Löse den Merge-Konflikt
Um den Merge-Konflikt zu lösen, öffnest du am besten IntelliJ(empfohlen) oder Visual Studio Code. Du kannst es natürlich auch über das Terminal versuchen, wenn du mutig genug bist.
Grundsätzlich entsteht ein Merge-Conflict, wenn am gleichen Ort unterschiedliche Änderungen vorgenommen wurden. Git kann dann die Änderungen nicht mehr automatisch zusammenführen (mergen).
Git zeigt einen Merge-Konflikt mithilfe von <<<
, >>>
und ===
an. Der Text bei <<<
sind deine Änderungen, die Änderungen bei >>>
kommen aus dem Remote-Repository. Getrennt werden sie durch eine Zeile an Gleichzeichen ===
. Oft abstrahiert deine IDE diese Darstellung jedoch noch.
Bei dieser List von Hobbies wurde lokal die Zeile “Schlafen” hinzugefügt, remote wurde auf der gleichen Zeile jedoch “Gym” hinzugefügt.
|
|
Um den Konflikt zu lösen hast folgende Möglichkeiten:
- Du behältst deine Änderungen und verwirfst die Anderen
1 2 3
- Lesen - Gamen - Schlafen
- Du verwirfst deine Änderungen und behältst die Anderen
1 2 3
- Lesen - Gamen - Gym
- Du behältst alle Änderungen
1 2 3 4
- Lesen - Gamen - Schlafen - Gym
- Du verwirfst beide Änderungen
1 2
- Lesen - Gamen
- Eine Mischung aus allen vorherigen Möglichkeiten
1 2 3
- Lesen - Gamen - Schlafen oder Gym
Um einen Merge-Konflikt zu lösen, musst du also aus diesen Möglichkeiten auswählen. Du kannst das für jeden Konflikt unterschiedlich machen. Deine IDE wird dir dabei einige Hilfestellungen liefern, welche den Prozess etwas vereinfachen, siehe dazu die Felder weiter unten.
Konflikt mit IntelliJ lösen
IntelliJ hat ein eingebautes UI um Merge Konflikte zu lösen. JetBrains stellt eine super Anleitung zur Verfügung.
Konflikt mit Visual Studio Code lösen
Visual Studio Code hat sogar zwei verschiedene Arten, wie du Merge-Konflikte lösen kannst. Einen eher simpeln Ansatz, "Inline Editor" genannt, und einen der etwas mehr an IntelliJ erinnert, "3-Way Editor" genannt.
Eine gute Anleitung zu beiden findest du hier.
Vim schliessen
Je nach Betriebssystem und Einstellungen, kann es sein das Git automatisch den Texteditor Vim öffnet. Das sieht dann etwa so aus wie im Bild unten.Um den Editor wieder zu schliessen, kannst du die folgende Schritte verwenden:
ESC
drücken:
drückenq!
eintippenENTER
drücken
Es gibt noch unzählige weitere Tools wie Meld oder vimdiff, welche dazu genutzt werden können Merge-Konflikte zu lösen. Du darfst dich gerne durchprobieren und das Tool wählen, welches dir am besten gefällt. Für die meisten reicht das Tooling ihrer IDE.
Schritt 8: Änderungen vom Stash anwenden
Jetzt können wir die Änderungen auf dem Stash, dem Master-Branch hinzufügen.
1
git stash pop 0
Du wirst wieder einen Konflikt in der
index.txt
Datei erhalten. Löse den Konflikt. Du kannst das wieder mit dem Tool deiner Wahl machen.Speichere die Datei und mache einen Commit.