#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
, но, учитывая вашу диаграмму и вопрос, я предполагаю, что это не точное соглашение, которому вы следуете.