Как переместить фиксацию между ветвями в Git?

Я уверен, что это простая вещь, которую спросили и ответили, но я не знаю, какие термины искать. У меня вот что:

    /--master--X--Y
A--B
    --C--D--E

где я установил C, D и E (только локально) на ветке, но затем я понял, что D и E действительно независимы от C. Я хочу переместить C в свою собственную ветку и сохранить D и E для последующего. То есть, я хочу этого:

                   /--C
    /--master--X--Y
A--B
    --D--E

Как вытащить C из-под D и E?

1 ответов


можно использовать git cherry-pick чтобы захватить C и поместить его на Y. предполагая, что Y существует как наконечник ветви с именем branch-Y:

$ git checkout branch-Y
$ git cherry-pick C

Итак, теперь C находится поверх Y. Но D и E также все еще содержат C (сбор вишни не перемещает фиксацию, он просто делает ее копию). Вам придется перебазировать D и E поверх B. предполагая, что E является наконечником branch-E А B-это branch-B вы можете:

$ git checkout branch-E
$ git rebase --interactive branch-B

это откроет интерактивный сеанс перебазирования. Просто удалите commit C полностью и оставьте D и E нетронутый. Затем у вас будет D и E, ребазированные поверх B без C.