bff

フルスタックエンジニアを目指して学んだことなどを記録しています

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名>