Слить ветку git после удаления - PullRequest
1 голос
/ 20 января 2012

У меня есть ветка git, над которой я работал, под названием feature1 с подтвержденным кодом.Я понял, что хотел бы разделить некоторые новые функции на новую ветку под названием feature2 и удалить эту функциональность из feature1, чтобы сохранить четкое разделение между функциями.

Я пытался найти хорошийспособ сделать это так, чтобы позже я мог перенести feature2 и / или feature1 в master.

Решение, о котором я подумал, - создать ветку feature2 на основе feature1, а затем удалить связанный с feature2 код из feature1.Я опасаюсь, что если вначале Feature2 будет объединен с мастером, а затем будет добавлен Feature1, «удалит» ли код функции Feature2 из мастера?

Есть ли лучший способ сделать это?

Ответы [ 2 ]

2 голосов
/ 20 января 2012

Попробуйте это:

 git branch original-tip
 git branch feature2
 git checkout -b feature1

 git rebase -i HEAD~5 # replace 5 with the number of commits to go back
                      # before any of this work occurred

Теперь пометьте все коммиты с помощью «edit» и удалите все строки, которые не имеют отношения к функции 1. Сохраните и выйдите. Теперь вам будет предложено отредактировать эти коммиты. Добавить все, что вам нужно, и поставить его, а затем

 git rebase --continue

Повторяйте этот процесс, пока перебазирование не будет завершено.

 git checkout feature2

Примените те же шаги, что и ранее, для feature2. После этого у вас будут две отдельные функции и ветвь, указывающая, где они у вас были вместе.

Добавить:

Есть еще один способ сделать это.

 git checkout -b start HEAD~5
 git checkout -b feature1
 git branch feature2

Теперь используйте оформление заказа или выбор вишни, чтобы сделать ветви. Это более ручной способ получения точных деревьев, которые вы хотите для каждого коммита. Интерес представляет вариант патча для добавления и сброса. Также этот синтаксис для git checkout полезен в этой ситуации:

 git checkout <some sha1> -- some files

Git дает вам много способов выполнить то, что вы хотите. В зависимости от того, насколько изолированы ваши коммиты, вы можете выбрать один метод из другого.

0 голосов
/ 20 января 2012

Лучше всего найти последний коммит до того, как вы добавили какую-либо часть кода, связанного с feature2, и основать на нем ветку feature2.

Если все изменения f2 были добавлены после f1, все простохорошо, вам нужно только сбросить feature1 обратно к этому коммиту.

В противном случае (если частичные изменения смешаны) вы можете создать две новые ветви (pure_f1, pure_f2) с одним и тем же корнем, а затем создать каждуюодин за cherry-pick отдельным коммитом от текущего feature1.

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