Как мне переместить коммит между ветками в Git? - PullRequest
37 голосов
/ 14 сентября 2010

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

    /--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 Ответ

50 голосов
/ 14 сентября 2010

Вы можете использовать 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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...