Git - Как раздавить выбранные коммиты? - PullRequest
0 голосов
/ 03 января 2019

У меня есть следующая история git:

        X --- X --- X --- X --- X feature_branch 
       /           /                        
X --- X --- X --- X develop

Как вы можете видеть, в какой-то момент ветка разработки была объединена с feature_branch.Теперь я хочу объединить feature_branch для разработки, и я хочу, чтобы в истории ветви функций было только два коммита:

  • commit one (уничтожил все коммиты ветви Feature)
  • commit two (mergeразработать для фиксации ветвления)

Я пытался использовать git rebase -i Develop , но это не показывает слияние разработки для фиксации ветвления функции.

Как это сделать?

Редактировать1 После git rebase -i HEAD ~ 6 (6, потому что слияние - это отдельный коммит после коммита ветки компонента3, это немного упрощает схему выше) У меня есть что-то вроде этого:

pick 1efad76 feature commit1
pick bae14d6 feature commit2
pick 3de7c48 feature commit3
pick 01dbb6a develop commit3
pick 674b2aa develop commit4
pick db5d9be feature commit4
pick 9cbe436 feature commit5

Коммит слияния виден как две разработки коммитов - разработка фиксации 3 и разработка фиксации 4.Как поставить туда "с" , чтобы достичь моей цели?Должен ли я как-то изменить порядок этих коммитов?

1 Ответ

0 голосов
/ 04 января 2019

Вы сможете достичь намеченного результата, выполнив следующие действия:

git rebase -i HEAD~5 поменяйте 5 на столько коммитов, сколько требуется

Оттуда выВы сможете использовать такие вещи, как fixup, которые уничтожат коммит и отбросят лог-сообщение коммита.

Не торопитесь с этим, убедитесь, что вы прочитали, что говорит вам git, и если вы сделаетеошибка - git reflog обеспечил вам защиту - вы можете reset в любой момент вашей истории и отменить многие вещи с помощью reflog - это вывело меня из многих солений раньше!Подробнее здесь

Как только вы закончите интерактивную перебазировку и получите историю коммитов, выглядящую так, как вы этого хотите, вы можете выполнить слияние с ускоренной перемоткой вперед.в разработке, если вы закончили с этой функцией (см. ниже) - или продолжите работу с ней, пока не будете готовы.

git checkout develop
git fetch
git pull
git merge --ff-only feature_branch

A pull сделает fetch автоматически, но это личное предпочтениемой, чтобы увидеть, что обновляется до того, как я pull.

Примечание: если вы отправляете pull-запрос, он сделает это за вас или предупредит, если не сможети скажу вам, что делать;)

Если вы продолжаете свою функцию, а develop часто обновляется, то будет хорошей идеей поддерживать вашу функцию в курсе развития.

Вы можете сделать git rebase origin/develop или просто develop - но опять же, я предпочитаю быть в курсе с origin - что я сначала fetch.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...