gitで必要なcommitだけをpushする方法
githubでプルリクを作ろうとしたときに、不要なcommitが含まれてしまったときの対処法です。 不要なcommitを含む操作前の状態に戻し、必要なcommitだけをチェリーピックして、プッシュします。
1.origin/masterとローカルのHEADとの差を確認(ハッシュ値は適当な長さで切っています)
$ git cherry -v origin/master + 7c1092149 Feature/AAAA + ebf2b02aa Feature/BBB + 909d5dada Feature/CCC + 46739a0fc Feature/DDD <-- 今回必要なcommit
2.今回のコミットの一つ前の状態を確認する
$ git log --oneline (HEAD -> feature/SAFIEP-991_ecmail_ship_in_3days) 46739a0fc (HEAD -> feature/mybranch) Feature/DDD <-- 今回必要なcommit 909d5dada Feature/CCC ebf2b02aa Feature/BBB 7c1092149 Feature/AAAA 8eb9csa01 Previous state <-- この状態に戻したい。
3.2.で確認した状態に戻す(この例では、8eb9csa01 Previous state)
$ git reset --hard 8eb9csa01
4.必要なコミットだけを取り込む(この例では、46739a0fc Feature/DDD)
$ git cherry-pick 46739a0fc
5.リモートにプッシュする(HEADはbranch名でも構いません)
$ git push origin HEAD
これで必要なcommitだけを取り込むことができました。 不安な方は、5.の前に以下のコマンドで今回のcommitだけが差分であることを確認できます。
$ git cherry -v origin/master + 46739a0fc Feature/DDD <-- 今回必要なcommit
また、5. の結果うまくいかなかったという場合は、以下のコマンドでプッシュを取り消せます。
$ git push --delete origin <branch名>