Как Самодержавие сказал, git rebase , вероятно, то, что вы хотите.
Пример:
Допустим,у вас есть A-B-C-D
и вы хотите объединить A-B-C
с Y
.Создает клон C
и перемещает клон на Y
:
git checkout -b C_copy C
git rebase --onto Y A~1 C_copy # <= --onto [target] [source] [what]
Проверьте, все ли прошло хорошо, и при необходимости разрешите конфликты на своем пути.
Теперь у вас естьC_copy
поверх Y
, например: Y-[A_copy]-[B-copy]-C_copy
Вы можете отредактировать это с помощью интерактивной перебазировки, например, чтобы раздавить ее (при условии, что вы все еще на C_copy
):
git rebase -i HEAD~3
Если что-то пошло не так, вы можете просто выбросить C_copy
, поскольку это не влияет на C
.
Теперь вы можете либо перемотать вперед Y
до C_copy
, либо объединить егоиспользуя git merge --no-ff
(укажите --no-commit
для редактирования вашего коммита, если хотите):
git checkout Y
git merge --no-ff [--no-commit] C_copy