(追記)すごくいいねがついていますが、コメントで皆さんが提案してくださっている方法の方が簡単なのでおすすめです。コメント欄を参照してください。
通常ブランチを作ってからブランチを切り替えて実装を始めますが、たまにはうっかりブランチを作るのを忘れてしまうことありますよね。
そんなときの対処法のメモです。要は新しく作った別のブランチにコミットを移動する方法です。
間違えて3つmasterにコミットしてしまっている状態で、新しくbranch01ブランチを作ってそこに移すというシナリオで書いていきます。
branch01ブランチを作る
ブランチを作るべきだった位置からブランチを作る
$ git branch branch01 origin/master
origin/master
のところはコミット番号でも構いません。
branch01ブランチに切り替え
$ git checkout branch01
branch01ブランチに移動したいコミットをコピー
コミット番号を調べる
$ git log --oneline --decorate --graph master
* m000003 (master) なんか修正3
* m000002 なんか修正2
* m000001 なんか修正1
* m000000 (origin/master, origin/HEAD) 作業開始地点
m000001からm000003までの3コミットがbranch01に移したいコミットとします。
branch01ブランチに移したいコミットをcherry-pickコマンドでコピー
$ git cherry-pick m000001
$ git cherry-pick m000002
$ git cherry-pick m000003
確認
$ git log --oneline --decorate --graph master branch01
* b000003 (HEAD, branch01) なんか修正3
* b000002 なんか修正2
* b000001 なんか修正1
| * m000003 (master) なんか修正3
| * m000002 なんか修正2
| * m000001 なんか修正1
|/
* m000000 (origin/master, origin/HEAD) 作業開始地点
branch01ブランチにコピーできてる。
コミット番号は新しく振られます。
masterから移したコミットを削除する
masterに切り替える
$ git checkout master
コミットを3つ削除する
$ git reset --hard HEAD~3
HEAD is now at m000000 作業開始地点
HEAD~3
は戻す数によって変えてください。
確認
$ git log --oneline --decorate --graph master branch01
* b000003 (branch01) なんか修正3
* b000002 なんか修正2
* b000001 なんか修正1
* m000000 (HEAD, origin/master, origin/HEAD, master) 作業開始地点
きれいになりました。