Git ветвь тестирования слияния (окончательная фиксация) для ветвления

Я создал ветку тестирования. У этого есть много крошечных коммитов, чтобы построить одну особенность. В конце этого я хочу принять окончательные завершенные изменения и поместить их в главную ветку.
Мастер-ветвь не должна содержать историю ветки тестирования.
В конечном итоге ветка тестирования будет удалена.

Каков наилучший способ достичь этого?
Будет ли генерация патча и применение его на мастер лучше всего?
Если да, как мне создать/применить патч?

Ответы

Ответ 1

Различные подходы описаны в разделе Понимание Git Workflow":

Краткосрочная работа

Подавляющее большинство времени, моя очистка - это просто слияние сквоша.

git checkout master
git merge --squash private_feature_branch
git commit -v

Большая работа

Я решил, что мое изменение должно быть разбито на более мелкие изменения, поэтому сквош слишком тупой инструмент. (Как правило, я спрашиваю: "Было бы легко проверить код?" )

git rebase --interactive master

(не вариант в вашем случае, как вы упомянули в своем вопросе)

Объявление банкротства ветки

Возможно, моя ветка функций существовала очень долго, и мне пришлось объединить несколько ветвей в мою ветку функций, чтобы поддерживать ее в актуальном состоянии, пока я работаю. История запутана. Его проще всего захватить необработанный diff создать чистую ветвь.

git checkout master
git checkout -b cleaned_up_branch
git merge --squash private_feature_branch
git reset

Теперь у меня есть рабочий каталог, полный моих изменений, и ни один багаж из предыдущего ветки. Теперь я вручную добавляю и фиксирую свои изменения.

Ответ 2

Вы ищете --squash вариант git merge:

- squash --no-squash

Создайте рабочее дерево и состояние индекса, как если бы произошло реальное слияние (за исключением информации о слиянии), но на самом деле не делают фиксацию или переместите HEAD, и не запишите $GIT_DIR/MERGE_HEAD, чтобы вызвать следующий gitcommit для создания слияния. Это позволяет создать single commit поверх текущей ветки, эффект которой такой же, как и слияние другой ветки (или больше в случае осьминогов).

С помощью -no-squash выполните слияние и зафиксируйте результат. Этот параметр может использоваться для переопределения --squash.

Итак git merge --squash test-branch и завершите.

Вы также можете попробовать git merge --no-commit --no-ff test-branch

Ответ 3

git checkout master
git merge --squash testing-branch

То, что --squash поместит ваш рабочий набор в состояние, как если бы все изменения в ветке тестирования были объединены с мастером, но не создавали никаких коммитов. Затем вы можете сделать git commit, и все изменения войдут в одну фиксацию.