脳汁portal

アメリカ在住(だった)新米エンジニアがその日学んだIT知識を書き綴るブログ

Gitで間違ったブランチで開発をしてしまった場合の対処(masterブランチで開発を始めてしまった場合など)

Gitで間違ったブランチで結構開発してしまって、その差分を他のブランチに移したいときの手順です。

commit前の開発を他のブランチへ移す

git stash # 一時退避
git checkout ${実際に開発したいブランチ}
git stash pop  #<====直前のgit stash で退避した内容を取り出す
  • 最初のgit stashで差分を一時的に退避します
  • 次に実際に開発したいブランチへ移動します
  • 最後にgit stash popとすると退避した内容を現在いるブランチへ反映させることが出来ます。
  • 必要な場合はこの後Commitやpushをしましょう

commit後の開発を他のブランチへ移す

間違って開発して、しかも間違って他のブランチにcommitしちゃった時に、コミット自体を他のブランチへ移す方法

# 確認
git log  
  # => 間違ったcommitのハッシュ値を控えておく。
  # Example
  ### commit df7cbe2c3cee8700b5680674d3e60623083f4fac   <== これ!!
  ### Author: nouziru <foobar@gmail.com>
  ### Date:   Thu Jul 30 00:42:26 2015 +0000

# コミットの引越し
git checkout ${実際に開発したいブランチ}
git cherry-pick ${メモしといたHash値}
git push origin ${実際に開発したいブランチ}

# 間違った方のブランチのコミットの取り消し
git checkout ${間違ってcommitしたブランチ}
git reset --hard HEAD^ # 直前のcommit取り消し(ファイル内容ごとrollback)

git commit -a -c ORIG_HEAD ###修正後にcommitする場合
  • gitはコミット等を削除してユーザ側から見えなくなっても、裏側でデータを保存しているらしい
  • この変更履歴はcommitのhash値に紐づいている
  • なので、commitのhash値を指定すればそのcommitの内容を取り込める
  • cherry-pickとは、英語で「(よいところだけを)つまみ食いする」の意らしい
git cherry-pick <commit id(hash)>