よくあるパターン

  • 開発用ブランチでバグフィックスしました。
    続いて別機能を実装しました。
    そしたらさっきのバグフィックスに漏れがありました。
    まだマスターにマージしてないので、さっきのコミットに纏めたい。

  • バグフィックスの内容と新規追加機能を同じコミットにしていたのを分割したい。

対応1(多分アンチパターン)

当該コミットまで git reset --soft HEAD^ で戻してから git stash save 'hogefuga' でコメントしながらStashしていってる。

対応2(こっちが正統?)

git rebase -iを使う。

  1. 対象のブランチに移動して、修正したいコミットの1つ前のコミットハッシュを取得
    $ git log -n 10 --oneline --reverse
    8e96afe commit 09.01.
    ed0a6b5 commit 09.10.
    931681c commit 09.21.
    ...
    ※過去10個分のコミットを古い方から表示している。
  2. 上記のed0a6b5のコミットを修正したい場合。
    $ git rebase -i 8e96afe
    edit ed0a6b5 commit 09.10.
    pickup 931681c commit 09.21.
    ...
    ※対象のコミットだけeditとして確定(保存&終了)する。
  3. 当該コミットがワークブランチに展開される。
    この状態で、修正・追加をした後に、git commit --amendを実施することで、元のコミットを修正できる。 また、コミットを分割したい場合は、対象ファイルをgit addした上でgit commitすることで新たにコミットを追加できる。
  4. 全ての変更を完了した後、git rebase --continueを実施するとワークブランチから抜けて元いたブランチに復帰する。
    git logすると対象のコミットが修正されていることが確認できるはず。
0