Git Rebase (слияние сквош) Моя особенность ветви на другую ветку
-
09-12-2019 - |
Вопрос
Я ищу команду git, чтобы помочь мне с моими функциональными ветвями, когда они готовы пойти в мастер.Эта команда Git будет сквошить все мои изменения в моей ветке в один коммит на вершине мастера.Я делаю это сегодня с:
git rebase origin/master
git rebase -i HEAD~4
.
Где 4 - количество коммитов для сквоша.Тем не менее, это требует от меня, чтобы узнать, сколько у меня есть.Я делаю это сегодня бегом:
git log HEAD...origin/master
.
, а затем подсчитывать коммиты.
Я чувствую, как будто должен быть лучший способ сделать это.Или это как все остальные тоже это тоже?
Решение
Все, что вам нужно сделать:
git checkout feature_branch
git rebase master
git checkout master
git merge --squash feature_branch
.
как the a href="http://linux.die.net/man/1/git-merge" rel="noreferrer"> Документы для git merge --squash
говорят:
Создайте рабочее дерево и состояние индекса, как будто произошло реальное слияние (за исключением информации об объединении), но на самом деле не заказывайте обязательство или не перемещать голову, а также записывать $ git_dir / merge_head, чтобы привести к следующей команде Git CommitСоздайте коммит слияния.Это позволяет создавать один коммит в верхней части текущего ветви, эффект которого совпадает с объединением другого ветви (или более в случае осьминога).
После этого вы можете генеракодировать ваши изменения, которые уже поставлены.
Другие советы
Вот что я делаю, собрал из большого опыта работы в более крупных командах:
# 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
.
Надеюсь, это поможет!
Я думаю, вы ищете git merge --squash
.Он должен принести комбиниты из вашей функции филиала в мастер и раздавить их, чтобы вы могли создать один коммит.