Link Search Menu Expand Document

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

  1. Bearbeite die Datei README.md.
    • Erstelle ein Commit dazu.
    • Prüfe mit git show, ob das Commit OK ist.
  2. Versuche ein Push
    • Dies wird scheitern, denn Deine Kollegin Bea hat die in der Zwischenzeit die Datei average.kts bearbeitet und gepushed.
  3. Integriere mit Pull
  4. 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.

  1. Wir haben schon eine Änderung, die zu einem Konflikt führt, vorbereitet und committed. Untersuche diese mit git show
  2. Führe ein Pull durch.
  3. 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 .

Zur Aufgabe

Zum Überblick