web-dev-qa-db-ja.com

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

DとEの下からCをヤンクするにはどうすればよいですか?

37
Chris Perkins

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はそのままにしておきます。次に、CなしでBの上にDとEをリベースします。

53
mipadi