Lösung zu Schritt 1 - Fast-Forward beim Pull
Im einfachste Fall haben wir selber gar nichts gemacht, und wollen nur die Änderungen von Anja übernehmen.
Führe ein Pull durch.
Lasse Dir Status und den Commit-Graphen zeigen.
fast-forward $ git pull
Updating 47053b2..8598867
Fast-forward
average.kts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
From ../origin-for-merge-samples
47053b2..8598867 main -> origin/main
Git signalisiert, dass ein Fast-Forward durchgeführt wurde.
Der Graph zeigt, dass keine Verzweigung entstanden ist und kein Merge notwendig war.
fast-forward $ git log --graph --oneline --decorate
* 8598867 (HEAD -> main, origin/main, origin/HEAD) Verwende double Werte statt int
* 47053b2 Created file average.kts on branch main by anja .
* 75dfc35 Created file README.md on branch main by anja .
Lösung zu Schritt 2 - Merge erzwingen beim Pull
Auch dieses haben wir nichtnichts gemacht, und wollen nur die Änderungen von Anja übernehmen.
Führe ein Pull mit --no-ff
durch.
Lasse Dir Status und den Commit-Graphen zeigen.
no-ff $ git pull --no-ff
Merge made by the 'ort' strategy.
average.kts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
From ../origin-for-merge-samples
47053b2..8598867 main -> origin/main
Git signalisiert, dass kein Fast-Forward durchgeführt wurde.
Der Graph zeigt, dass ein Merge enstanden ist.
no-ff $ git log --graph --oneline --decorate
* be3b61b (HEAD -> main) Merge branch 'main' of ../origin-for-merge-samples
|\
| * 8598867 (origin/main, origin/HEAD) Verwende double Werte statt int
|/
* 47053b2 Created file average.kts on branch main by anja .
* 75dfc35 Created file README.md on branch main by anja .
Lösung zu Schritt 3 - Integration bei Änderungen in verschiedenen Dateien
- Bearbeite die Datei
README.md
.- Erstelle ein Commit dazu.
- Prüfe mit
git show
, ob das Commit OK ist.
- Versuche ein Push
- Dies wird scheitern, denn Deine Kollegin Bea hat die in der Zwischenzeit die Datei
average.kts
bearbeitet und gepushed.
- Dies wird scheitern, denn Deine Kollegin Bea hat die in der Zwischenzeit die Datei
- Integriere mit Pull
- Untersuche das Ergebnis, z. B.
- den Commit-Graphen an
- die Änderungen, die Anja gemacht hat
- die Commits, die Anja gemacht hat
changes-in-different-files $ # Edit file README.md
changes-in-different-files $ git commit -am "Commited file README.md on branch main by bjoern "
[main cc16e28] Commited file README.md on branch main by bjoern
1 file changed, 1 insertion(+), 1 deletion(-)
changes-in-different-files $ git show
commit cc16e28115d01b0553942e880ce01ec0be06b066
Author: bjoern <kapitel26blog@gmail.com>
Date: Thu Jul 29 00:00:00 2021 +0000
Commited file README.md on branch main by bjoern
diff --git a/README.md b/README.md
index 8b6805c..28cf676 100644
--- a/README.md
+++ b/README.md
@@ -1 +1 @@
-Hallo Wolt!
+Hallo Welt!
changes-in-different-files $ git push
To ../origin-for-merge-samples.git
! [rejected] main -> main (fetch first)
error: failed to push some refs to '../origin-for-merge-samples.git'
hint: Updates were rejected because the remote contains work that you do not
hint: have locally. This is usually caused by another repository pushing to
hint: the same ref. If you want to integrate the remote changes, use
hint: 'git pull' before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
Diese Meldung zeigt, dass im origin
Änderungen vorliegen, die wir noch nicht integriert haben.
changes-in-different-files $ git pull
Merge made by the 'ort' strategy.
average.kts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
From ../origin-for-merge-samples
47053b2..8598867 main -> origin/main
Git hat die Änderungen geholt und ein Merge-Commit erzeugt.
changes-in-different-files $ git log --oneline --graph
* ad227b4 Merge branch 'main' of ../origin-for-merge-samples
|\
| * 8598867 Verwende double Werte statt int
* | cc16e28 Commited file README.md on branch main by bjoern
|/
* 47053b2 Created file average.kts on branch main by anja .
* 75dfc35 Created file README.md on branch main by anja .
changes-in-different-files $ git diff HEAD^1...HEAD^2
diff --git a/average.kts b/average.kts
index 4cd02bf..5ff5b2b 100644
--- a/average.kts
+++ b/average.kts
@@ -1,6 +1,6 @@
if(args.isEmpty())
throw RuntimeException("No arguments given!")
-val s = args.map{ it.toInt() }.sum()
+val s = args.map{ it.toDouble() }.sum()
println("The average is ${s/args.size}")
changes-in-different-files $ git log HEAD^2..HEAD^1
commit cc16e28115d01b0553942e880ce01ec0be06b066
Author: bjoern <kapitel26blog@gmail.com>
Date: Thu Jul 29 00:00:00 2021 +0000
Commited file README.md on branch main by bjoern
Und jetzt können wir erneut ein Push versuchen.
changes-in-different-files $ git push
To ../origin-for-merge-samples.git
8598867..ad227b4 main -> main
Lösung zu Schritt 4 - Integration bei Änderungen in derselben Datei
In diesem Fall bearbeiten wir dieselbe Datei, die auch Anja bearbeitet hat. Es wird zu einem Konflikt kommen, den wir aulösen müssen.
- Wir haben schon eine Änderung, die zu einem Konflikt führt, vorbereitet und committed. Untersuche diese mit
git show
- Führe ein Pull durch.
- Lasse Dir den Status zeigen und löse den Konflikt.
changes-in-same-files $ git show
commit 1fac0522fadc13dbac62d35e6bdeadb3fddc9762
Author: bjoern <kapitel26blog@gmail.com>
Date: Thu Jul 29 00:00:00 2021 +0000
Refactoring: s in summe umbenennen
diff --git a/average.kts b/average.kts
index 4cd02bf..7eb87f2 100644
--- a/average.kts
+++ b/average.kts
@@ -1,6 +1,6 @@
if(args.isEmpty())
throw RuntimeException("No arguments given!")
-val s = args.map{ it.toInt() }.sum()
+val summe = args.map{ it.toInt() }.sum()
-println("The average is ${s/args.size}")
+println("The average is ${summe/args.size}")
changes-in-same-files $ git pull
Auto-merging average.kts
CONFLICT (content): Merge conflict in average.kts
Automatic merge failed; fix conflicts and then commit the result.
From ../origin-for-merge-samples
47053b2..ad227b4 main -> origin/main
Wie erwartet, ist es zu einem Konflikt gekommen.
changes-in-same-files $ git status
On branch main
Your branch and 'origin/main' have diverged,
and have 1 and 3 different commits each, respectively.
(use "git pull" if you want to integrate the remote branch with yours)
You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge)
Changes to be committed:
modified: README.md
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: average.kts
In der Datei stehen Konfliktmarkierungen.
changes-in-same-files $ cat average.kts
if(args.isEmpty())
throw RuntimeException("No arguments given!")
<<<<<<< HEAD
val summe = args.map{ it.toInt() }.sum()
||||||| 47053b2
val s = args.map{ it.toInt() }.sum()
=======
val s = args.map{ it.toDouble() }.sum()
>>>>>>> ad227b4cd09e983d92048dfdcea0b912b645b25d
println("The average is ${summe/args.size}")
changes-in-same-files $ # Edit average.kts replacing pattern with val summe = args.map{ it.toDouble() }.sum()
Nicht vergessen: Nach dem Bereinigen git add
aufrufen.
changes-in-same-files $ git add average.kts
changes-in-same-files $ git commit -m 'Änderungen von Anja integriert'
[main 4dee889] Änderungen von Anja integriert
Und hier nochmal der entstandene Graph:
changes-in-same-files $ git log --graph --oneline
* 4dee889 Änderungen von Anja integriert
|\
| * ad227b4 Merge branch 'main' of ../origin-for-merge-samples
| |\
| | * 8598867 Verwende double Werte statt int
| * | cc16e28 Commited file README.md on branch main by bjoern
| |/
* / 1fac052 Refactoring: s in summe umbenennen
|/
* 47053b2 Created file average.kts on branch main by anja .
* 75dfc35 Created file README.md on branch main by anja .