[toc]
Git力が低い僕です。
ブランチ切ってPushしたつもりが、MasterブランチにコミットしてPushしてしまった場合の対処方法をメモとして残しておきます。
Git力低い(2回目)ので、もっと効率の良いやり方があるかと思いますが、コメントなどで指摘していただけると嬉しいです。
3つコミットしてすでにGitHubにPushしてしまったとします。
$ git branch| grep "*"
* master
$ git log --oneline
96b6e0f 変更C
cb5efb9 変更B
1b32926 変更A
3つ前の状態に戻す
git reset --hard
でHEAD、インデックス、ワーキングツリーすべてを戻します。
[memo]
HEAD ・・・ 現在の最新コミットの状態
インデックス ・・・ コミットするためのファイルの状態
ワーキングツリー ・・・ 最新のファイルの状態
ワーキングツリー - [add] -> インデックス - [commit] -> ローカルリポジトリ - [push] -> リモートリポジトリ
$ git reset --hard HEAD~3
ブランチの作成
すでにある場合は git checkout
でブランチを切替えます。
ブランチ名を fix_hoge
とします。
$ git checkout -b fix_hoge
Cherry-pickでコミットを移す
下のコミットから順に移していきます。
$ git cherry-pick 1b32926
$ git cherry-pick cb5efb9
$ git cherry-pick 96b6e0f
$ git push origin fix_hoge
リモートリポジトリのMasterブランチを元に戻す
push --force
すれば、リモートリポジトリ側に強制的に反映されます。
他の人が作業している場合は、予め push --force
することを伝えておいてあげましょう。
$ git checkout master
$ git push -f origin master
参考
git reset
がよく分かっていなかったので参考にさせていただきました。