自分用のメモとして残します。
■やり方
前提として、cherry-pickを用いて連続したコミットをFromTo形式で移動させるのため、途中移動させたくないコミットがある場合は、この方法はできません。
また、移動先ファイルでも同じような修正が場合はコンフリクトがあるため、基本できません。
コミットの移動(コピー)
1.移動したいコミットRevを確認する。
移動したいコミットがあるブランチ(=誤ってコミット&プッシュしたブランチ)をチェックアウトする。
続いて、git fetch
でリモートのコミット情報を取得してから
git log --oneline
コマンドで コミットRevを確認してFrom~Toの2件分控える。
git checkout 移動したいコミットRev群があるブランチ名
git fetch
git log --oneline
2.コミットの移動先ブランチをチェックアウト
git checkout 移動先ブランチ名
3.コミットをコピー
1で確認したFromToのコミットRevを指定
git cherry-pick FromRev^..ToRev
FromRev^の ^
はFromRevを含むという意味です。
4.コミットのコピーまでの情報をリモートに反映する。
git push
移動して不要になったコピー元コミットを削除する
5.コピー元コミットがあるブランチをチェックアウト
git checkout コピー元コミットがあるブランチ名
6.コミット削除
注意)下記の例はブランチのHeadから3つ前まで履歴を削除するという例です。
git reset --hard HEAD~3
例えばHEADを含む2つのコミットをコピーした場合は
上記のようにHEADから数えて3つ前のコミットがHEADになるようにHEAD,HEADの直前コミットの2件をリセットするという意味なる。
7.コミット削除をリモートに反映する。
git push -f origin ブランチ名
以上。