あまブログ

ドキドキ......ドキドキ2択クイ〜〜〜〜〜〜〜ズ!!

【Git】派生元ブランチの変更

この記事ではGitの派生元ブランチ(親ブランチ)の特定と変更方法を紹介します。

間違った親ブランチからブランチを作成してしまいコミットもしてしまった時などに有効です。

派生元ブランチの特定方法

$ git show-branch | grep "*" | grep -v "$(git rev-parse --abbrev-ref HEAD)" | head -n 1 | awk -F'[]~^[]' '{print $2}'
  • grep "*":*がついてる行のみ表示
  • grep -v "$(git rev-parse --abbrev-ref HEAD)":カレントブランチを除外
  • head -n 1:1行目を表示
  • awk -F'[]~^[]' '{print $2}’:ブランチ名のみ表示

派生元ブランチの変更方法

方法1. git rebase --onto

                            H---I---J topicB
                           /
                  E---F---G  topicA
                 /
    A---B---C---D  main

$ git rebase --onto main topicA topicB

                 H'--I'--J'  topicB
                /
                | E---F---G  topicA
                |/
    A---B---C---D  main
  • git rebase --onto <変更後の親ブランチ> <現在の親ブランチ> <移動するブランチ>
  • rebaseによりコミットが改変されているため、リモートへのpushにはgit push -fが必要

方法2. git cherry-pick

$ git checkout -b topicB-new master
$ git cherry-pick <コミットid>
  • 新しいブランチを作り、欲しいコミットだけをgit cherry-pickで移動させる
  • 適用させたいコミット数が少ない場合に有効

【参考】