Как объединить git фиксирует в ветки разработки ветвь функции
У меня есть ветка разработки и ветвь функций в моем репозитории git. Я добавил фиксацию для разработки, и теперь я хочу, чтобы это объединение было объединено с моей ветвью функций. Если я сделаю это
git checkout feature
git merge develop
В итоге получается слияние. Поскольку я буду объединять новые коммиты, чтобы часто развиваться в моей ветке функций, я бы хотел избежать всех этих ненужных коммитов. Я видел этот ответ, который предложил сделать git rebase develop
, но в итоге он перематывает мой ветки слишком далеко, а ошибка не выполняется.
Update:
То, что я закончил, было
git checkout feature
git merge develop # this creates a merge commit that I don't want
git rebase # this gets rid of the merge commit but keeps the commits from develop that I do want
git push
Обновление: Я только заметил, что исходная фиксация при разработке получает другой хеш, когда я сливаюсь, а затем перестраиваю его. Я не думаю, что то, что я хочу, потому что в конце концов я объединю функцию в развитие, и я предполагаю, что это не будет играть хорошо.
Ответы
Ответ 1
Чтобы интегрировать одну ветвь в другую, вам нужно либо слить, либо переустановить. Так как это безопасно только для переустановок, которые не привязаны нигде (не объединены с другими локальными ветвями, а не нажимаются на любой удаленный), обычно лучше слить.
Если ваша ветка функций является чисто локальной, вы можете переустановить ее поверх разработки. Тем не менее, требуется время, чтобы понять, как работает rebase, и до того, как вы это сделаете, довольно легко случайно создать дублированные или отброшенные коммиты. Объединяющие коммиты могут выглядеть шумно, но слияние гарантировано всегда будет безопасным и предсказуемым.
Для лучшего просмотра попробуйте выполнить запись всего вместе в графике:
git log --all --graph --oneline --decorate
Также стоит подумать, действительно ли вам нужны коммиты на develop
, объединенные в feature
. Часто это вещи, которые могут быть разделены до тех пор, пока feature
не будет объединен с develop
позже.
Если вы регулярно обнаруживаете, что вам нужен код develop
на feature
, это может быть признаком того, что ветки вашей функции слишком длинны. В идеале функции должны быть разделены таким образом, чтобы их можно было обрабатывать независимо, без необходимости регулярной интеграции на этом пути.
Ответ 2
Если вам нужна только одна фиксация из ветки develop
, вы можете выбрать ее в ветке feature
:
git checkout feature
git cherry-pick -x <commit-SHA1>
Конец будет применен как новый поверх вашей ветки (при условии, что он не сгенерирует конфликт), и когда вы слейте назад ветвь feature
Git, она справится с ней без конфликтов.