Надеюсь, я правильно понял ваш вопрос:
Некоторые коммиты в другой ветке (кроме красной) с именами и прочим не годятся.
Итак, я предполагаю, что красная ветка хороша, а некоторые коммиты на зеленой ветке хороши, а некоторые плохи. То же самое касается других (не красных) веток. Ветви относительно короткие (имеют 1-2-3 коммита, но не сотни).
Я хотел бы объединить коммит из зеленой ветви, присвоить ему имя, подобное v0.1, и чтобы этот коммит не отслеживал предыдущие коммиты.
Хорошо, сначала создайте ветку из красной ветки, что хорошо:
git checkout red-branch
git checkout -b my-clean-branch
Теперь, если вы войдете в эту ветку (например, git merge green
), my-clean-branch
будет также загрязнен плохими коммитами. Таким образом, вы можете cherry-pick
только хорошие коммиты из зеленой ветки:
git log green-branch
// identify good commits, lets say, commits 123 and 456 are good, and commit 789 is not
// while being on my-clean-branch
git cherry-pick 123
git cherry-pick 456 // or in one command as you with
На этом этапе убедитесь, что my-clean-branch
подходит для продолжения. Вы можете пометить его как v1.0, если хотите (проверьте команду git tag
)
Это как будто я помещаю весь материал с нуля на красную ветку, не редактируя его раньше.
Предполагая, что my-clean-branch
это хорошо, вы можете просто внести изменения в red-branch:
git checkout red-branch
git merge my-clean-branch // or rebase if you want