Как объединить 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, она справится с ней без конфликтов.