Git rebase (Merge Squash) моя ветвь функций на другую ветку - PullRequest
52 голосов
/ 08 марта 2012

Я ищу команду git, которая поможет мне с моими ветками функций, когда они будут готовы войти в Master.Эта команда git объединит все мои изменения в моей ветке в один коммит поверх мастера.Я делаю это сегодня с:

git rebase origin/master
git rebase -i HEAD~4

Где 4 - количество коммитов для сквоша.Тем не менее, это требует, чтобы я знал, сколько коммитов у меня есть.Я делаю это сегодня, запустив:

git log HEAD...origin/master

и затем подсчитав коммиты.

Мне кажется, что должен быть лучший способ сделать это.Или это так все остальные тоже делают?

Ответы [ 3 ]

88 голосов
/ 09 марта 2012

Все, что вам нужно сделать, это:

git checkout feature_branch
git rebase master
git checkout master
git merge --squash feature_branch

Как документы для git merge --squash говорят:

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

После этого вы можете git commit свои изменения, которые уже подготовлены.

14 голосов
/ 05 июня 2014

Вот что я делаю, основываясь на большом опыте работы в больших командах:

# Get latest from master
git checkout master
git pull --rebase

# rebase master into your feature branch
git checkout feature/my-feature
git rebase master --preserve-merges

# merge feature into master
git checkout master

# DO ONLY ONE of the 2 options below
# if you only have one or (maybe) 2 commits in your feature branch
git merge feature/my-feature

# OR
# this forces an empty merge commit (useful if we need to roll things back)
git merge --no-ff feature/my-feature

# if you use Github, this should also close the pull request
git push origin master

Надеюсь, это поможет!

2 голосов
/ 08 марта 2012

Я думаю, что вы ищете git merge --squash.Он должен ввести коммиты из вашей ветки объектов в master и раздавить их, чтобы вы могли создать один коммит.

...