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