Если вы можете перебазировать 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, она тоже работает правильно - все изменения из ветки объединены, включая те, которые были отменены.