経緯
OJTでアプリ開発をしていた際に、
『〇〇からxxまでのコミットを一つにまとめて再度プッシュして』
とレビューを受けた際に苦戦したので作業メモを残しておくことにしました!
必要な拡張機能を追加
Visual Studio CodeからこちらのGit Graphという拡張機能を追加しました
ブログ記事を参考に作業開始
このあたりについてはこの記事を参考にしました
参考:複数のコミットをまとめる
統合したいコミットたち(赤の四角で囲んだ2つのコミット)の下のコミットを右クリックして
『Rebase current branch on this Commit...』
を選択する
Launch Interactive Rebase in new Terminalにチェックを入れて、rebase開始。
記事どおりにGitLensが開くはず、、、
と思ったら開かなかった。。。
のでvimで作業を継続することにしました
vimでコミットを統合
実際に作業した際は上の5つを統合しました。
先ほどのGitGlaphのものとは上下が逆になっているみたいです。
vimにも慣れていないので、それも込みでメモ
- 『i』でインサートモード
- 5つのコミットを1つにまとめるために
rails g Model Taskコミットのpickを除いて、下の4つのpickをsquashに変更 - escでインサート解除
- :wqで上書き保存
※途中で止めるときは:q!でも良いし、中途半端に終えてしまったときは
git rebase --abort
でリセットできました。
ここまで済むとコミットメッセージを編集する画面が出てきました。
スクショし忘れていたので、画像は編集済みのもの。赤い四角の部分に今までの元のコミットメッセージが出てくるので、必要ないものをコメントアウトして、必要なものだけ残して内容を変更しました。
これで上書きすると、5つのコミットが統合されて、コミットメッセージとしては
『ModelTaskを作成してバリデーションとseedsを実装』
となりました。
変更をリモートに反映させる
このままpushしようと思ったが、リモートのコミットの構造と違うので衝突が起こって実行できなかった、、
git push -f origin HEAD
-fオプションをつけることで強制的にプッシュすることができた。今回は一人での開発だったので特に注意もなくできたが、チーム開発時は注意が必要とのこと。
まとめ
以上でコミットをまとめて、再レビューを上げることができました!めでたしめでたし
もっと良い方法があったらぜひ教えていただきたいです。