Kiedy w Git Rebase wystąpi konflikt?

Sep 28 2020

Czytałem kilka postów na tym forum, progit, Youtube i kilka losowych blogów o rebase.

Najbardziej ogólną formą zakończenia tego tematu jest:

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

i wykonuję:

git checkout Topic
git rebase Master

Idealnie byłoby:

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

Ale dwie obawy to:

  1. Czy D '= D, E' = E?
  2. Co to jest konflikt git rebase?

Jeśli chodzi o pierwszą obawę i ten post ,

  1. Rebase wykonuje scalanie na D i E, a przede wszystkim ze skomplikowanym wejściem.

Na przykład, kiedy idzie do D, zgodnie z postem i czy mam rację

  1. HEAD odłączony do C
  2. Git porównuje zmiany z A na D i zmiany z A na C.
  3. Po scaleniu git porównuje D ', D i E

I to mnie najbardziej dezorientuje. Dlaczego scalanie obejmuje więcej niż 2 zatwierdzenia? Jak pojawia się konflikt?

EDYTOWAĆ:

Uruchomiłem kilka poleceń, zobacz:

git init

Utworzono zawartość Random.txt: Master 1

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

Utwórz nowy oddział

git checkout -b rebase_conflict

Zmień zawartość Random.txt: 1

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

Alter Random. txt Treść: 2

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

Przełącz na master

git checkout master

Zmień zawartość Random.txt: Master 2

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

Przełącz gałąź i rebase

git checkout rebase_conflict
git rebase master

Uzyskaj błąd konfliktu Zmień Random.txt Zawartość: 1

git add Random.txt
git rebase --continue

W tym miejscu spodziewam się kolejnego konfliktu rebase, bo zgodnie z logiką

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

Po pierwszej rebase

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

Na tym etapie oczekuję nowego zatwierdzenia oprócz Konfliktu 1 '. Czy nie ma konfliktu scalania między Conflict 2 i Conflict 1 '?

Ponieważ Conflict 1 'Random.txt content: 1, while

Conflict 2 Random.txt zawartość: 2

Zmieniają tę samą linię, prawda?

Odpowiedzi

TimBiegeleisen Sep 28 2020 at 20:27

Scalanie lub zmiana bazy w powyższym przykładzie może spowodować konflikty scalania. Możliwe, że tylko jeden lub drugi miałby konflikty. Aby zrozumieć, co robi zmiana bazy, rozważ poniższy diagram, który pokazuje, jak Topicwyglądałoby po zmianie bazy Master:

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

Tutaj apostrofy wskazują, że zmiany Di Ezatwierdzenia zostały ponownie zastosowane w nowej bazie Master. Po ponownym zastosowaniu każdego zatwierdzenia istnieje szansa na konflikty scalania. Tak więc w przypadku ponownego zastosowania N zatwierdzeń może wystąpić N zestawów konfliktów scalania. Z drugiej strony scalanie zawsze powodowałoby co najwyżej jeden zestaw konfliktów scalania. Jeśli martwisz się o to, możesz preferować scalanie zamiast zmiany bazy.