Git merge только конечный результат ветки разработки

Если структура Git-репозитория выглядит так:

master: A-C
dev:     \B-D-E

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

master: A-C-E'

E' commit будет содержать все изменения из ветви разработки и только последнее сообщение о коммите, добавляя новую функцию master в один tidy commit.

Возможно ли это в Git? Я надеюсь, что смогу вести историю хранилища GitHub аккуратно, так как мои ветки разработки часто содержат ранние коммиты, которые являются незаконченными, неполированными и непригодными для потребления человеком.

2 ответа

Решение

Часть слияния должна быть легкой (см. " Как использовать git-merge --squash ? "):

git checkout master
git merge --squash dev

Возможно, вам придется настроить сообщение о коммите, хотя:

git commit --amend -m "<commit message from E>"

(у вас есть другие варианты при выполнении слияния)

Вы можете достичь этого, хотя это не будет слияние. (Помните: коммит слияния имеет 2 или более родителей. E' только один родитель: C.)

git rebase -i master dev
  • Откроется текстовый редактор. + Изменить pick в squash для всех, кроме первой строки, затем сохраните файл и закройте редактор.
  • Откроется текстовый редактор. (Заполнено другим содержимым.) Отредактируйте его содержимое, чтобы оно стало сообщением о коммите E', затем сохраните файл и закройте редактор.

затем

git checkout master
git merge dev --ff-only
git branch -d dev
Другие вопросы по тегам