Я столкнулся с ситуацией, связанной с git и Bitbucket, которую я не понимаю.
Я создал ветку branchB
, которая произошла от master
.Я сделал несколько коммитов и создал запрос на master
.Во время рассмотрения этого запроса на извлечение я начал работать над другой функцией, которая была расширением этой функции с branchB
.Поэтому я создал еще одну ветку (branchC
), которая произошла от branchB
.Когда моя расширенная функция была готова, я создал запрос на получение branchB
.См. Изображение I .В то время у меня не было конфликтов слияния.
Я хотел позволить рецензентам взглянуть на оба запроса по отдельности и получитьотдельные запросы на получение с небольшими изменениями.
Мой план был следующим:
- объединить запрос на получение 1 (
PR1
) с мастером, используя параметр --squash
- измените целевую ветвь в запросе на извлечение 2 (
PR2
) на ведущий (см. Изображение 2 ) - объедините запрос на извлечение 2 (
PR2
) с ведущим
Однако, когда я объединяю запрос на извлечение 1 (PR1
) с мастером, используя опцию --squash
, Bitbucket автоматически изменяет целевую ветвь запроса на извлечение 2 (PR2
) на master
и я получил некоторые конфликты в запросе на получение 2 (PR2
).
Итак, я разрешил конфликты:
git checkout master
git pull
git checkout branchC
git rebase master
git mergetool
Я решилвсе конфликты здесь.
git rebase --continue
На самом деле, описанная проблема произошла со мной дважды, так как у меня также было branchD
, происходящее изbranchC
.Когда я слил branchB
в master
, мне нужно было разрешить некоторые конфликты на шаге 6. Однако, когда я слил branchC
в master
, мне не пришлось разрешать какие-либо конфликты вручную на шаге 6 (несмотря на то, что Bitbucket показывал мне конфликты слияния, мне пришлось перебазировать branchC
).
Мю следующие вопросы:
- Почему Bitbucket показывал мне любые конфликты слияниядля
PR2
, когда я слил PR1
в мастеринг с использованием опции --squash
? Я бы ожидал, что он выяснит, что изменение между картинками I
и II
происходит только в идентификаторах коммитов - кодеэто не изменилось.Git / Butbucket должен быть в состоянии выяснить, какие изменения я хочу внести. - Почему я не получил никаких конфликтов, которые должны быть разрешены вручную, когда я перебирал
branchD
в master
(после слияния branch C
в master
)? Поскольку Bitbucket не может объединить мой запрос на извлечение, я ожидаю, что мне потребуется разрешить некоторые конфликты вручную.Может ли это быть связано с версией git на моем рабочем столе и в Bitbucket? - Был ли у меня какой-либо лучший вариант, чем создание этих трех запросов на получение в моем случае? Мог ли я избежать этих конфликтов слияния?
Дополнительная информация:
- версия git на моем рабочем столе:
2.17.1.windows.2
- Версия Bitbucket:
v5.12.2
- версия gitна сервере Bitbucket:
2.14.5
- Я искал похожие вопросы ( 1 , 2 , 3 ).Никто из них не занимается моей проблемой.
Буду признателен за любое объяснение этого явления.
Редактировать: 1. Я объединил все свои запросы извлечения, используя опцию --squash
.2. Я обновил изображение, чтобы показать, что branchB
и branchC
не начинаются с коммитов B1
и C1
соответственно.