Как убрать коммиты из родительской ветки при ребазинге? - PullRequest
1 голос
/ 07 ноября 2019

Предположим, у меня есть ветвь widget, которая была создана путем ветвления feature и добавления нескольких коммитов для построения widget.

Теперь я хочу, чтобы виджет был доступен в masterбез остальной части функции. Существует ли автоматический способ создания новой версии widget, которая состоит только из master плюс информация о виджете?

Просто выполнить проверку widget и выполнение git rebase master не работаетпотому что это принесло бы с собой все остальные части функции.

Я могу сделать git rebase --interactive master, но это требует ручной идентификации и удаления не связанных с виджетом коммитов. Есть ли команда, которой я могу присвоить имена трех ветвей и сделать это автоматически?

Ответы [ 2 ]

2 голосов
/ 07 ноября 2019

Один довольно простой способ - сделать коммиты cherry-pick для новой ветви, созданной из master:

git checkout -b widget-2 master
git cherry-pick feature..widget

# then to apply that to the real widget branch and get rid of the temp

git checkout -B widget widget-2
git branch -d widget-2

Но мы могли бы вообще пропустить временную ветку, теперь, когда я об этом думаю:

git checkout --detach master
git cherry-pick feature..widget
git checkout -B widget HEAD
0 голосов
/ 07 ноября 2019

У вас есть это:

0-0-0-0-0-0 <--master
     |-0-0-0-0-0-0 <--feature
                 |-0-0-0-0-0 <--widget

, и вы хотите превратить его в это:

0-0-0-0-0-0 <--master
     |    |-0-0-0-0-0 <--widget
     |-0-0-0-0-0-0 <--feature

Команда git rebase довольно гибкая. Вы можете использовать git rebase с опцией --onto, чтобы сделать это:

git rebase --onto master feature widget
...