Разрешение конфликтов без слияния целевой ветви

#git

#git

Вопрос:

Я работаю над веткой функций, которая отсекается от main branch - 1 , и предполагаю объединить в main branch - 2 . (Это немного неудобный поток git, который мы используем в проекте)

Теперь, при повышении PR до branch - 2 , я вижу конфликты слияния в двух файлах. Я не хочу использовать branch - 2 свой код из-за другой текущей работы других членов команды. Следовательно, мне нужен способ разрешить эти конфликты слияния без слияния обратно branch - 2 в моей ветке функций.

Было бы здорово, если бы кто-нибудь знал, как это можно сделать в IntellijIDEA, иначе было бы достаточно команд.

Комментарии:

1. Отложите текущую работу, исправьте конфликт, объедините его, откройте свой тайник

2. Если вы не хотите объединять ветку-2 в свою функцию, почему вы повышаете PR до ветки-2?

3. У меня есть другое решение, например, выбор вишни и т. Д., Но интересно, Есть ли какой-нибудь трюк.

4. @zdhim Ветка-2 большая, и вы пытаетесь получить определенную часть ветки-2, например, исправление ошибок или рефакторинг?

Ответ №1:

Теперь, при повышении PR до ветки — 2…

Если вы повышаете PR до ветки-2, предположительно, вы хотели бы объединиться с веткой-2. Но вы не хотите объединяться с веткой-2.

Следовательно, мне нужен способ разрешить эти конфликты слияния без слияния с обратной веткой — 2 в моей ветке функций.

Вы могли бы, но такое частичное слияние, скорее всего, будет нарушенным кодом.

Например, предположим, что вы оба реорганизовали функцию, чтобы она работала немного по-другому. Это приводит к конфликту. Как вы осмысленно разрешаете этот конфликт, не объединяя остальные изменения из ветки-2?

Если вы разрешаете это, принимая изменения в ветке-2, вам также необходимо принять изменения в ветке-2, в которой вызывается функция. Если вы разрешите это, приняв свои собственные изменения, вам придется разрешать конфликты с вызовами функций where branch-2 changed позже.


Я собираюсь предположить, что branch-2 — это большая функциональная ветвь с множеством независимых исправлений, и вам нужны только исправления. В этом случае создайте новую ветку от branch-1, выберите только исправления и объедините их. Теперь каждый может получить доступ к исправлениям, не перетаскивая остальную часть ветки-2.

Перебазируйте (или объедините) вашу функциональную ветвь в ветку-1, чтобы получить исправления.

Также перебазируйте (или объедините) ветку-2 в ветку-1. Это упрощает ветку-2.

Чтобы извлечь его. Ваш репозиторий выглядит следующим образом.

 A - B - C [branch-1]
        |
        | D - E - F [branch-2]
        
         G - H - I [feature]
  

Вы хотите только зафиксировать E. Создайте новую ветку от branch-1.

 $ git checkout -b fix branch-1

          [fix]
A - B - C [branch-1]
        |
        | D - E - F [branch-2]
        
         G - H - I [feature]
  

Вишневый выбор E.

 $ git cherry-pick E
          E1 [fix]
         /
A - B - C [branch-1]
        |
        | D - E - F [branch-2]
        
         G - H - I [feature]
  

Объедините его в ветку-1, как и любой другой PR.

           E1
         /  
A - B - C --- M [branch-1]
        |
        | D - E - F [branch-2]
        
         G - H - I [feature]
  

Перебазируйте обе ветви поверх новой ветви-1.

 $ git checkout branch-2
$ git rebase branch-1
$ git checkout feature
$ git rebase branch-1

          E1
         /  
A - B - C --- M [branch-1]
              |
              | D - F [branch-2]
              
               G - H - I [feature]
  

Обратите внимание, как E исчезает в ветке-2, потому что она избыточна с E1.