728
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Organization

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

(追記)すごくいいねがついていますが、コメントで皆さんが提案してくださっている方法の方が簡単なのでおすすめです。コメント欄を参照してください。

通常ブランチを作ってからブランチを切り替えて実装を始めますが、たまにはうっかりブランチを作るのを忘れてしまうことありますよね。
そんなときの対処法のメモです。要は新しく作った別のブランチにコミットを移動する方法です。

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

きれいになりました。

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
728
Help us understand the problem. What are the problem?