Как так разрешить конфликты между ветками - PullRequest
0 голосов
/ 06 февраля 2019

Допустим, у нас есть проект P1, который разработан более чем одним разработчиком.

Разработчик D1 проверил master как B1 и внес изменения.Разработчик D2 проверил мастер как B2 и внес изменения.

D1 объединяет изменения B1 в мастер.Теперь D2 создал запрос на извлечение, хочет объединить мастер, но есть конфликты.

Этот конфликт может быть разрешен во время процесса объединения с помощью экрана разрешения конфликтов github.

Однако D2 просят разрешить конфликт в ветке B2, а затем создать запрос на извлечение.Как D2 мог сделать это?Это то, что нужно делать или конфликты должны разрешаться во время слияний?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Да, фактически b1 и b2 имеют одну и ту же историю (то есть master).b1 сливается обратно с мастером, и тогда b1 теперь завершается, мастер обновляется (это + на диаграмме ниже.

Теперь его ветвь b2, которая хочет слиться с мастером (или push),но чтобы убедиться, что слияние прошло гладко, сначала b2 должен слить (или вытащить) последнюю версию master.Таким образом, у вас есть конфликты - вам нужно разрешить их, возможно, заново протестировать все, а затем зафиксировать слияние в вашей ветви b2.

Теперь b2 готов для слияния с мастером - это будет «ускоренное перемещение», означающее, что мастер буквально просто будет перемещен в ваш последний коммит, потому что он знает, что вы уже выполнили всю работу.

Дрянная диаграмма:

           ---b2-------merge----
          /             /       \
master -------------+---------ff-merge--
          \         |
           ---b1---/
0 голосов
/ 06 февраля 2019
git checkout master
git pull
git checkout D2
git merge master
# Here are conflicts. Resolve conflicts and do git add on the conflicted files.
git commit
git push

Теперь вы можете выполнить запрос на слияние.

Способ думать об этом так.Вы начали D2 от мастера.Затем D1 был интегрирован в мастер.Для того, чтобы все было интегрировано, вы должны объединить свои изменения из D2 в master, но та же самая операция даст тот же результат, если вы объедините текущий master (с D1 в нем) в вашей собственной ветви (D2).После разрешения всех конфликтов в вашей ветви у вас есть версия, содержащая master (без D1 и D2), D1 и D2, но единственное различие между D2 и master заключается только в изменениях, внесенных в D2 (теперь включая разрешение конфликтов).- это тоже изменения).Таким образом, чтобы сделать мастер точно таким же, как ваш D2, вы можете просто объединить D2 с мастером, потому что все изменения и конфликты учтены.Имеет ли это смысл?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...