1. ホーム
  2. git

[解決済み] あるブランチから別のブランチへコミットをコピーするには?

2022-03-18 22:50:49

質問

マスターから2つのブランチを持っています。

  • v2.1 : (バージョン2)数ヶ月前から取り組んでいる
  • wss : 昨日、ある特定の機能をマスター (本番) に追加するために作成したものです。

昨日のコミットをwssからv2.1へコピーする方法はありますか?

解決方法は?

本当はマージで全部できるようなワークフローにすべきなんでしょうけど。

- x - x - x (v2) - x - x - x (v2.1)
           \
            x - x - x (wss)

つまり、あなたがしなければならないことは git checkout v2.1git merge wss . もし、何らかの理由でどうしてもこれができない場合、そして git rebase を実行して wss ブランチを正しい場所に移動させれば、どこかからひとつのコミットを取得してそれを別の場所に適用するコマンドを実行できます。 git チェリーピック . 適用したいブランチをチェックアウトして、次のように実行するだけです。 git cherry-pick <SHA of commit to cherry-pick> .

rebase があなたを救うかもしれない方法のいくつか。

履歴がこのような場合

- x - x - x (v2) - x - x - x (v2.1)
           \
            x - x - x (v2-only) - x - x - x (wss)

を使うことができます。 git rebase --onto v2 v2-only wss を使えば、wssを直接v2上に移動させることができます。

- x - x - x (v2) - x - x - x (v2.1)
          |\
          |  x - x - x (v2-only)
           \
             x - x - x (wss)

そして、マージすることができます もしあなたが本当に、本当に 本当に がマージできるところまで到達できなくても、rebase を使って一度に複数のチェリーピックを効果的に行うことができます。

# wss-starting-point is the SHA1/branch immediately before the first commit to rebase
git branch wss-to-rebase wss
git rebase --onto v2.1 wss-starting-point wss-to-rebase
git checkout v2.1
git merge wss-to-rebase

注:これを行うために余分な作業が必要になる理由は、リポジトリに重複したコミットを作成することになるからです。ブランチやマージを簡単に行うためのポイントは、一か所でコミットを行い、それを必要な場所にマージすることですべてを行えるようにすることです。重複したコミットは、その二つのブランチを決してマージしないという意思を表します(後でマージしたいと思ったときに、コンフリクトが発生します)。