From 78e3b9830460c2c7cb87c67a4898c8f6db78aab4 Mon Sep 17 00:00:00 2001
From: morit02 <morit02@mi.fu-berlin.de>
Date: Sun, 17 Dec 2023 22:21:11 +0100
Subject: [PATCH] Add git merging commands/info

---
 README.md | 156 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 156 insertions(+)

diff --git a/README.md b/README.md
index f00a34e..438f7df 100644
--- a/README.md
+++ b/README.md
@@ -17,6 +17,8 @@ Eine Tabelle zur Übersicht der verwendeten Befehle
 | `git branch <BRANCH> [<BRANCH/COMMIT>]` | Erstellen einer neuen Branch
 | `git branch -d` | Löschen einer lokalen Branch
 | `git checkout` | Zu einer anderen Branch wechseln
+| `git merge` | Zusammenführen von zwei Branches mit einem Merge-Commit
+| `git rebase` | Zusammenführen von zwei Branches durch anhängen der Commits
 
 
 ## Projekterstellung
@@ -704,6 +706,160 @@ c1 <- c2 <- c3 <- c4 <- c5
 
 </table>
 
+
+### Merging
+In einem **Git Repository** kann es verschiedene Branches mit unterschiedlichen Dokumenten/Verzeichnissen geben.
+Um einen eindeutigen Projektstand wiederherzustellen, können Branches zusammengefügt werden.
+Häufig werden Branches wieder mit einer **Hauptbranch** zusammengefügt, die dann wieder als Ausgangspunkt für neue Branches dient.
+
+Das Zusammenfügen von zwei Branches kann mit `git merge` oder `git rebase` erfolgen.
+
+**Merge:**\
+Mit `git merge` entsteht ein neuer Commit auf der aktuellen Branch.
+Der Merge-Commit beinhaltet beide Branches als Vorgänger.
+
+**Rebase:**\
+Mit `git rebase` werden die Commits einer Branch ans ende der aktuellen Branch "geschoben".
+Dabei wird der Abzweig mit den Commits entfernt.
+
+
+<table>
+<tr>
+<th> Commits und Branches </th>
+<th> Git Befehl - Mergen einer Branch </th>
+</tr>
+
+<tr>
+<td>
+
+```
+        c3 <- c4                    b1
+       /
+c1 <- c2 <- c5 <-c6                 main
+```
+</td>
+
+<td>
+<!--- Merging Table -->
+<table>
+<tr>
+<td>
+
+- Mergen einer Branch (*b1*) in die aktuelle Branch (*main*)
+```
+git checkout main
+git merge b1
+```
+</td>
+
+<td>
+
+- Mergen einer Branch (*main*) in die aktuelle Branch (*b1*)
+```
+git checkout b1
+git merge main
+```
+</td>
+</tr>
+
+
+<tr>
+<td>
+
+- Resultat:
+```
+        c3 <- c4 <-----              b1
+       /               \
+c1 <- c2 <- c5 <-c6 <- c7            main (*)
+```
+</td>
+
+<td>
+
+- Resultat:
+```
+        c3 <- c4 <- c7      b1 (*)
+       /           /
+c1 <- c2 <- c5 <-c6         main
+```
+</td>
+</tr>
+</table>
+</td>
+</tr>
+</table>
+
+
+<table>
+<tr>
+<th> Commits und Branches </th>
+<th> Git Befehl - Mergen einer Branch </th>
+</tr>
+
+<tr>
+<td>
+
+```
+        c3 <- c4                    b1
+       /
+c1 <- c2 <- c5 <-c6                 main
+```
+</td>
+
+<td>
+<table>
+<tr>
+<td>
+
+- Rebase Commits von der aktuellen Branch (*main*) auf die angegebene Branch (*b1*)
+```
+git checkout main
+git rebase b1
+```
+</td>
+
+<td>
+
+- Rebase Commits von der aktuellen Branch (*b1*) auf die angegebene Branch (*main*)
+```
+git checkout b1
+git rebase main
+```
+</td>
+</tr>
+
+
+<tr>
+<td>
+
+- Result:
+```
+              b1
+              V
+        c3 <- c4 <- c5 <- c6        main (*)
+       /
+c1 <- c2
+```
+</td>
+
+<td>
+
+- Result:
+```
+                main
+                 V
+c1 <- c2 <- c5 <-c6 <- c3 <- c4         b1 (*)
+```
+</td>
+</tr>
+
+</table>
+</td>
+</tr>
+</table>
+
+
+
 ## Add your files
 
 - [ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files
-- 
GitLab