Как мне создать новую ветку, очищающую коммиты из другой ветки? - PullRequest
1 голос
/ 11 августа 2011

У меня есть две ветви: master и feature.

Я закончил работу над feature, поэтому у этой ветви много коммитов, но я не хочу публиковать ее как есть,Я хочу создать ветку с именем feature_clean со всеми изменениями из feature, но с лучшими коммитами.

Я попробовал следующее:

git checkout -b feature_clean master
git checkout feature
git rebase --interactive feature_clean
# reorganize commits etc, save and close editor

, и это создало feature_cleanправильно, НО это также изменило feature.На самом деле обе ветви были равны.

Что я сделал не так?Сейчас я хочу сохранить feature как есть (я удалю его позже, после того, как feature_clean будет соответствующим образом протестирован и утвержден).

Ответы [ 2 ]

1 голос
/ 11 августа 2011

у вас неправильная команда rebase;) вы говорите git перебазировать текущую ветку (HEAD, в данном случае feature) поверх feature_clean. Я думаю, что вы действительно хотите сделать, это:

git checkout -b feature_clean feature
git rebase -i master

т.е. повторы фиксируются от feature_clean до master. feature все еще будет указывать на старые коммиты.

git rebase master - сокращение от git rebase --onto master master HEAD: возьмите все коммиты между master и HEAD (достижимы с HEAD, но не с master) и прикрепите их к master

0 голосов
/ 11 августа 2011
  1. Оформить ветку элемента
    git checkout feature

  2. Создать новую ветку feature_clean
    git checkout -b feature_clean

  3. Перенесите эту ветку туда, где вы откололись от мастера
    git rebase -i --onto shaOfSplit shaOfSplit feature_clean

  4. Сделайте интерактивную перебазировку

В конце вашей перебазировки у вас будут две ветки разорваны из одной и той же точки.feature_clean будет перебазированной версией feature

...