どうもこんにちは。
今回は、間違えてmasterブランチやdevelopブランチでコミットしちゃった時の対処法をメモしておきます。
コミットする前の場合
masterブランチやdevelopブランチで修正をしてしまったが、コミットはしていない!という場合は、以下の手順でコミットすればOKです。
$ git status # git addされているファイルがないことを確認
git stash # 変更を一時保存
git checkout -b feature-branch # 新しいブランチを作成して切り替え
git stash pop # 保存した変更を適用
git add <コミットしたいディレクトリやファイルのパス> # 変更をステージング
git commit -m "作業内容の説明" # コミット
コミットしちゃった時
一番頑張る方法
まず何らかの形でコミットしたコードを残します。(メモ帳とか)
$ git reset --hard HEAD^1 # 直前のコミットを取り消し
$ git checkout -b <作業ブランチの名前>
# ここでメモしておいたコードをペースト
$ git add <コミットしたいディレクトリやファイルのパス>
$ git commit -m "コミットメッセージ"
cherry-pick を使用する方法
コミットをそのまま新しいブランチに移動させることができます。
$ git log # コミットのハッシュを確認してコピー
$ git checkout -b <作業ブランチの名前> # 新しいブランチを作成
$ git cherry-pick <コピーしたコミットのハッシュ> # コミットを新しいブランチに適用
$ git checkout develop # developに戻る
$ git reset --hard HEAD~1 # developから誤ったコミットを削除
インタラクティブrebaseを使用する方法
複数のコミットを移動させたい場合に使います。
$ git checkout -b <作業ブランチの名前> # 新しいブランチを作成
$ git rebase -i develop # インタラクティブrebaseを開始
# エディタで移動させたいコミットを'pick'から'edit'に変更
# rebaseを完了
$ git checkout develop
$ git reset --hard HEAD~<移動させたコミットの数>
まとめ
インタラクティブrebase
を使用する方法 はちょっと難易度高いですね...
自分はcherry-pick
を使用する方法をおすすめします。
というか、コミットする前にブランチ確認しましょうね!
以上