Попробуйте это:
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 дает вам много способов выполнить то, что вы хотите. В зависимости от того, насколько изолированы ваши коммиты, вы можете выбрать один метод из другого.