Сначала вам нужно определить коммит, который будет общим родителем изменений A и B. Как вы уже описали, это родитель родительского комита A. Используйте git log
, чтобы найти хеш для коммита до A.Обратите внимание, что вы можете просто ввести первые несколько букв / цифр хеша коммита.Давайте представим, что это «parent_commit»
Теперь извлеките этот коммит, который мы собираемся использовать в качестве заголовка новой ветви для Изменения B.
git checkout parent_commit
Затем создайте новую ветку изэто, где мы будем фиксировать изменения B.
git checkout -b changeB
Наконец, используйте git add
и git commit
, чтобы зафиксировать изменения B в этой новой ветви.Когда закончите, выполните git push
, чтобы вытолкнуть ваш коммит B из вашей новой ветви, независимой от изменения A. В качестве альтернативы, если вы уже зафиксировали Изменение B, тогда используйте git cherry-pick commitB
, а затем git pull
.
Теперь у вас будет исходная ветвь с A и новая ветвь с B, делящая историю до родителя A.
Заключительное замечание: если вы уже зафиксировали B и сделали для него ветвь (иесли бы он был проверен) вы могли бы сделать ребазинг однострочный, упомянутый в другом ответе:
git rebase --onto master commit_A_sha