Git

Gitでブランチを作るのを忘れてmasterにコミットしてしまったときの対処法

More than 5 years have passed since last update.

通常ブランチを作ってからブランチを切り替えて実装を始めますが、たまにはうっかりブランチを作るのを忘れてしまうことありますよね。

そんなときの対処法のメモです。要は新しく作った別のブランチにコミットを移動する方法です。

間違えて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) 作業開始地点

きれいになりました。


参考