Introduction

特定の機能の追加で、膨大な量の修正をコンポーネント単位に分解してプルリクエストを投げて欲しい、と言う要望は結構ある。
サービス側とUI側とか。
テストも含めて単一のメンバーまたは組織が行い、それを本流にマージする際に起こりうる。

Resolution

開発側のコミットが一つになっているなら、分割。
開発中、適切なコンポーネント単位でコミットが分かれているなら、そのまま。
cherry-pickするなりしてプルリクエストを投げるなりすれば良い。

だけど、後者のようなパターンはまれ。
なので、想定は、開発したfeatureブランチをdevelopブランチにsquashで纏めて一つのマージにしてしまった場合。

この一つのコミットを分割して、プルリクエストを投げ直す。
なお、最新のコミットが分割対象と想定。

01. rebase

分割したいコミットのハッシュを確認。

1
2
$ git checkout <対象のブランチ>
$ git rebase -i <分割したいコミットのハッシュ>~

その後、エディタが立ち上がるので、pickedit に変更して確定。
Windowsの場合は ~ は二つ必要。

02. reset

この状態だとコミット自体は終わっているので、リセットして、未コミット状態に戻す。

1
$ git reset HEAD~

Windowsの場合は ~ は二つ必要。

03. コミット

あとは、コンポーネント単位にファイルを分割してコミット。

1
2
3
4
$ git add X
$ git commit -m "commit 1"
$ git add Y
$ git commit -m "commit 2"

04. 確定

1
$ git rebase --continue

まぁ、単純にresetから始めてもいい気がする。