Gitでpushを分割する
4つのコミットをmasterにしてしまったけど、pushしたいのは2つだけ。。。というときにどうするのか?
A00000008:master これは別にpushしたい
A00000007: これは別にpushしたい
A00000006: このコミットはpushしたい
A00000005: このコミットはpushしたい
A00000004:remote/origin/master
A00000003:
A00000002:
A00000001:
追記ここから
前提:ブランチつくって作業するのが原則。masterでできる限りコミットしない。
つまり、僕がこのような状況に陥るときは、git checkout -b hogehogeとしたつもりがmasterで作業していたぜーっていう感じ。
追記ここまで
手順
で、僕の場合は次の手順
- pushしたいコミット群の最後をcheckoutする
- 別にpushしたいコミットを退避するようのブランチをつくる
- cherry-pickで別にpushしたいコミット群をブランチにコピーする
- masterから別にpushしたいコミット群を削除する
- masterをpushする
コマンドでいうと
1. pushしたいコミット群の最後をcheckoutする
git checkout A00000004
2. 別にpushしたいコミットを退避するようのブランチをつくる
git checkout -b another_task
3. cherry-pickで別にpushしたいコミット群をブランチにコピーする
git cherry-pick master~1
git cherry-pick master~0
4. masterから別にpushしたいコミット群を削除する
git checkout master
git reset --hard HEAD^^
5. masterをpushする
git push origin master
補足
masterで作業するのが好きな人はpushの範囲を指定するとかでもいいと思います。