Wann wird Git Rebase Konflikte haben?

Sep 28 2020

Ich habe mehrere Beiträge in diesem Forum, Progit, Youtube und einigen zufälligen Blogs zur Rebase gelesen.

Die allgemeinste Form, um dieses Thema abzuschließen, ist:

- A - B - C   Master
   \  D - E Topic

und ich führe auf:

git checkout Topic
git rebase Master

Im Idealfall wäre es:

- A - B - C - D' - E' Master, Topic

Aber die 2 Bedenken sind:

  1. Ist D '= D, E' = E?
  2. Was ist ein Git-Rebase-Konflikt?

In Bezug auf das erste Anliegen und diesen Beitrag ,

  1. Rebase führt das Zusammenführen auf D und E und vor allem mit komplizierten Eingaben durch.

Zum Beispiel, wenn es um D geht, laut Beitrag und wenn ich richtig bin

  1. KOPF von C gelöst
  2. Git vergleicht zwischen Änderungen von A nach D und Änderungen von A nach C.
  3. Nach dem Zusammenführen vergleicht git zwischen D ', D und E.

Und das verwirrt mich am meisten. Warum umfasst das Zusammenführen mehr als zwei Commits? Wie erscheint ein Konflikt?

BEARBEITEN:

Einige Befehle ausgeführt, siehe Folgendes:

git init

Erstellt einen Random.txt-Inhalt: Master 1

git add Random.txt
git commit -m "Master 1"

Neuen Zweig erstellen

git checkout -b rebase_conflict

Ändern Sie den Inhalt von Random.txt: 1

git add Random.txt
git commit -m "Conflict 1"

Alter Random. txt Inhalt: 2

git add Random.txt
git commit -m "Conflict 1"

Zum Master wechseln

git checkout master

Ändern Sie den Inhalt von Random.txt: Master 2

git add Random.txt
git commit -m "Master 2"

Zweig wechseln und neu gründen

git checkout rebase_conflict
git rebase master

Konfliktfehler abrufen Ändern Random.txt Inhalt: 1

git add Random.txt
git rebase --continue

An dieser Stelle erwarte ich einen weiteren Rebase-Konflikt, weil nach der Logik

-- Master 1 -- Master 2
  \ -- Conflict 1 -- Conflict 2

Nach dem ersten Rebase

-- Master 1 -- Master 2 -- Conflict 1'
 \ -- Conflict 1 -- Conflict 2

Zum jetzigen Zeitpunkt erwarte ich zusätzlich zu Konflikt 1 'ein neues Commit. Gibt es nicht einen Zusammenführungskonflikt zwischen Konflikt 2 und Konflikt 1 '?

Weil Konflikt 1 'Random.txt Inhalt: 1, während

Konflikt 2 Random.txt-Inhalt: 2

Sie ändern die gleiche Linie, nicht wahr?

Antworten

TimBiegeleisen Sep 28 2020 at 20:27

Das Zusammenführen oder erneute Basieren in Ihrem obigen Beispiel kann zu Zusammenführungskonflikten führen. Es ist möglich, dass auch nur der eine oder andere Konflikte hat. Um zu verstehen, was eine Neubasierung bewirkt, betrachten Sie das folgende Diagramm, das zeigt Topic, wie es nach einer Neubasierung aussehen würde Master:

Topic:  -- A -- B -- C -- D' -- E'

Hier zeigen die Apostrophe an, dass die Dund ECommits erneut auf die neue Basis von angewendet wurden Master. Wenn jedes Commit erneut angewendet wird, besteht die Möglichkeit von Zusammenführungskonflikten. Bei erneuter Anwendung von N Commits kann es also zu N Gruppen von Zusammenführungskonflikten kommen. Andererseits würde eine Zusammenführung immer zu höchstens einer Reihe von Zusammenführungskonflikten führen. Wenn dies ein Problem von Ihnen ist, bevorzugen Sie möglicherweise das Zusammenführen gegenüber dem erneuten Basieren.