Разделение функции в новую ветку в Git - PullRequest
2 голосов
/ 12 июня 2011

Вот сценарий: я создал новый репозиторий для кодовой базы и сделал несколько коммитов, но я решил, что есть некоторая часть этой кодовой базы, которая должна быть в собственной ветви, а не в master.Как разделить этот код на другую ветку, чтобы мастер «не знал» об этом?Очевидно, что я не могу просто создать ветку и затем удалить код из мастера, так как любые последующие слияния из мастера в новую ветвь также удалят код в ветке.ответьте, но я не могу думать, как это должно быть сделано:)

Ответы [ 3 ]

4 голосов
/ 12 июня 2011

Если вы можете перебазировать master (то есть, никто не имеет изменений, которые вы хотите переместить в ветку), я бы использовал git rebase -i для перестановки коммитов в master, чтобы все коммиты, которые должны быть в ветке, были в конце концовсовершает, что должен оставаться в мастере.После этого создайте ветвь и сбросьте мастер, чтобы он не содержал никаких коммитов ветвления.

Например, если у вас были коммиты (где B обозначает коммит, который вы хотите переместить, иM тот, который должен остаться):

M1---B1---M2---B2---M3

преобразовать их в

M1---M2---M3---B1---B2

Создать новую ветвь и git reset --hard master в M3.

Если вы не можете перебазировать мастер, создайте свою ветку, git revert изменения, которые вы не хотите на мастере, а затем выполните git merge -s ours master.Это фактически говорит ветви, что вы знаете о возврате и не хотите его там.

После этого, если вы объединяете мастер в ветку, изменения в мастере корректно объединяются, но возврат не,Более того, если вы затем решите, что ветвь завершена, и вы хотите объединить ее с master, она тоже работает правильно - все изменения из ветки объединены, включая те, которые были отменены.

1 голос
/ 13 июня 2011

Оформить заказ мастера и отредактировать рабочий каталог, чтобы удалить (или скрыть?) Функцию, и зафиксировать это.

Создать ветку для разработки «новой» функции (я назову ее «dev»)., но вы должны назвать это чем-то значимым).Затем в dev отмените (не сбросьте!) Предыдущий коммит, отменив «удаление» (или скрытие) работы, которую вы только что сделали.Зафиксируйте этот возврат в ветке dev.

Шаг 3, прибыль.Вы теперь как основная ветка без фича, так и ветка темы с ней.

1 голос
/ 13 июня 2011

Вы можете сделать это, выбрав нужные коммиты в своей ветке.

Первая ветвь коммита перед первым коммитом, который вы хотите сделать приватным:

git checkout -b feature1 sha1^ # sha1 is the hash of the first private commit

Теперь вишня выбирает каждый коммит

git cherry-pick hash1 hash2 etc

Теперь удалите те же самые вmaster

git checkout master
git rebase -i sha1^ # as in the first checkout

Теперь удалите коммиты, которые вы выбрали для вишни.

Надеюсь, это поможет

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