うさぎ組

ソフトウェア開発、チームによる製品開発、アジャイル、ソフトウェアテスト

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で作業していたぜーっていう感じ。
追記ここまで

手順

で、僕の場合は次の手順

  1. pushしたいコミット群の最後をcheckoutする
  2. 別にpushしたいコミットを退避するようのブランチをつくる
  3. cherry-pickで別にpushしたいコミット群をブランチにコピーする
  4. masterから別にpushしたいコミット群を削除する
  5. 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の範囲を指定するとかでもいいと思います。