2015-05-24 4 views
3

Если структура репозитория выглядит следующим образом:Git объединить только конечный результат ветви разработки

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

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

master: A-C-E' 

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

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

ответ

3

Слияние часть должна быть легкой (см "How to use git-merge --squash?"):

git checkout master 
git merge --squash dev 

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

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

(у вас есть other options when doing the merge)

+0

Вот, спасибо. Я знал, что в этих строках должно быть что-то, но не найти его на страницах учебника. – Bobulous

1

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

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

Тогда

git checkout master 
git merge dev --ff-only 
git branch -d dev 
Смежные вопросы