Когда будет конфликт в git rebase?

Sep 28 2020

Я читал несколько постов на этом форуме, прогите, Youtube и некоторых случайных блогах для ребазирования.

Самая общая форма завершения этого предмета:

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

и я выполняю:

git checkout Topic
git rebase Master

В идеале это было бы:

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

Но есть 2 проблемы:

  1. D '= D, E' = E?
  2. Что такое конфликт git rebase?

Что касается первой проблемы и этого сообщения ,

  1. Rebase выполняет слияние по D и E, и, прежде всего, со сложным вводом.

Например, когда он переходит в D, согласно сообщению, и если я прав

  1. HEAD отсоединен от C
  2. Git сравнивает изменения с A на D и изменения с A на C
  3. После слияния git сравнивает D ', D и E

И это меня больше всего смущает. Почему слияние включает более двух коммитов? Кроме того, как возникает конфликт?

РЕДАКТИРОВАТЬ:

Выполните несколько команд, см. Следующее:

git init

Создан контент Random.txt: Мастер 1

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

Создать новую ветку

git checkout -b rebase_conflict

Изменить содержимое Random.txt: 1

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

Alter Random. txt Содержимое: 2

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

Перейти к мастеру

git checkout master

Изменить содержимое Random.txt: Мастер 2

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

Переключить ветвь и переустановить

git checkout rebase_conflict
git rebase master

Получить ошибку конфликта Alter Random.txt Content: 1

git add Random.txt
git rebase --continue

На этом этапе я ожидаю еще одного конфликта перебазирования, потому что по логике

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

После первой перезагрузки

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

На этом этапе я ожидаю нового коммита поверх Conflict 1 '. Нет ли конфликта слияния между конфликтом 2 и конфликтом 1?

Поскольку Conflict 1 'содержимое Random.txt: 1, тогда как

Конфликт 2, содержимое Random.txt: 2

Они меняют одну и ту же строчку, не так ли?

Ответы

TimBiegeleisen Sep 28 2020 at 20:27

Либо слияние, либо смещение в приведенном выше примере может привести к конфликтам слияния. Не исключено, что конфликты будут только у одного или другого. Чтобы понять, что делает перебазирование, рассмотрим следующую диаграмму, которая показывает, как Topicбудет выглядеть после перебазирования Master:

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

Здесь апостроф указывает , что Dи Eкоммиты были повторно на новую базу Master. При повторном применении каждой фиксации существует вероятность конфликтов слияния. Итак, в случае повторного применения N коммитов может возникнуть N наборов конфликтов слияния. С другой стороны, слияние всегда приводит не более чем к одному набору конфликтов слияния. Если это вас беспокоит, то вы можете предпочесть слияние, а не перебазирование.