Как мне объединить свою ветвь ветви в Master в Git?

#git #git-merge #git-rebase #feature-branch

Вопрос:

У меня фактически есть это:

 a -- b -- c                           <-- Master
           
            d -- e                    <-- BranchA
                  
                   f -- g -- H -- i   <-- BranchB
 

Что я хочу, так это интегрировать свои изменения из ветви и ветви в Master. Обычно мне нравится перебазироваться, но я не думаю, что это хорошая идея, так как мои изменения находятся в публичных репозиториях, и, в частности, фиксация H-это чья-то чужая работа.

Итак, если я прав в своем предположении, что слияние проще, мне интересно, нужно ли мне объединить Master в branchA, затем объединить branchA в BranchB, прежде чем объединять BranchB обратно в Master, или я могу сэкономить некоторое время и просто объединить Master в BranchB, а затем объединить все это обратно? Я понимаю, что это оставит беспорядочную историю фиксаций, отсюда мой предыдущий абзац.

Редактировать:

В мастере есть изменения, так как это командный проект.

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

1. Если в master прошлом коммите были дополнительные коммиты c , было бы полезно включить их в диаграмму.

Ответ №1:

Просто проверьте master и объединитесь BranchB в него, это объединит все изменения в master, так как BranchB содержит все изменения от BranchA .

 a -- b -- c                           
           
            d -- e                    <-- BranchA
                  
                   f -- g -- H -- i   <-- Master, BranchB
 

Поскольку это приведет к быстрому слиянию, если в нем нет изменений master , вы можете рассмотреть вариант --no-ff , при котором создается новая фиксация, явно указывающая, что ветвь была объединена.

 a -- b -- c -------------------------- j  <-- Master
                                     /
            d -- e                   /  <-- BranchA
                                   /
                   f -- g -- H -- i   <-- BranchB
 

В зависимости от того, что вы хотите «рассказать» с историей, вы также можете сначала объединить BranchA , а затем BranchB сначала объединить .

 a -- b -- c -------j------------------ k  <-- Master
                 /                   /
            d -- e                   /  <-- BranchA
                                   /
                   f -- g -- H -- i   <-- BranchB
 

во всех трех случаях результирующий код слияния одинаков, просто история отличается.

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

1. Смотрите мою правку, в мастере есть изменения. Извините, я должен был выразиться яснее.

2. В этом случае возможны только два последних варианта. тем не менее, я бы всегда использовал эту -no-ff опцию и дополнительно объединял брансы как можно чаще, поэтому, если функция A завершена, объедините ее в master. Когда это произошло, вы можете переназначить ветвь B на этот результат. Это не очень хорошая практика, когда несколько человек работают в одной и той же отрасли, считают, что каждый работает в своей собственной отрасли, что также уменьшает количество слияний (и потенциальных конфликтов)

Ответ №2:

Это в основном зависит от вашего рабочего процесса между вами и другими сопровождающими.

Чтобы достичь своей цели, да, вы можете просто объединить ветви A и B в master одну за другой.

Если не… вы следуете какой-то форме потока git , где ваша BranchA ветвь-это ваша ветвь выпуска, и вам нужно, чтобы она объединилась в master и BranchB , но, учитывая вашу диаграмму и вопрос, я предполагаю, что это не точное соглашение, которому вы следуете.