Kiedy w Git Rebase wystąpi konflikt?
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:
- Czy D '= D, E' = E?
- Co to jest konflikt git rebase?
Jeśli chodzi o pierwszą obawę i ten post ,
- 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ę
- HEAD odłączony do C
- Git porównuje zmiany z A na D i zmiany z A na C.
- 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
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.