Ветвь Git Merge Testing (финальная фиксация) к основной ветке - PullRequest
4 голосов
/ 02 февраля 2012

Я создал тестовую ветку.Он имеет множество крошечных коммитов для создания одной функции.В конце я хочу взять окончательные завершенные изменения и поместить их в основную ветвь.
Основная ветвь не должна содержать историю ветки тестирования.
Ветвь тестирования со временем будет удалена.

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

Ответы [ 3 ]

4 голосов
/ 20 ноября 2012

Различные подходы описаны в " Общие сведения о рабочем процессе Git ":

недолгая работа

В большинстве случаев моя уборка - это просто слияние сквоша.

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

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

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

git rebase - интерактивный мастер

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

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

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

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

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

1 голос
/ 02 февраля 2012

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

- squash --no-squash

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

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

То есть git merge --squash test-branch и фиксации.

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

0 голосов
/ 02 февраля 2012
git checkout master
git merge --squash testing-branch

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

...