「git rabseでコミットをきれいにしてpushする」に関しての考えをまとめました。

目次

リモートにPUSHしない場合に限り、rebaseは便利な機能となる。 rebaseを使いこなすことで、WIPなコミットを雑に作成できるし、それにより変更履歴を簡単に確認できる。 リモートリポジトリに反映する前にはコミットを整理して反映によって、コードレビュワーの方の読解負荷を下げることができる。

git rebase -iでローカルのコミットをまとめる

git rebase -i HEAD~3

pick 12345678 TI_CKET-001 コミット1
pick 87654321 TI_CKET-001 コミット2
pick abcdefgh TI_CKET-001 コミット3

rebase対象のファイルが表示される

注意: 下のファイル程最新のコミットになっている git logやGUIなどでの変更履歴コミットは基本最新が上になることが多いので注意。

また文字化けしている場合は、:set enc=utf-8と指定すると解消できる

コミットを置き換える

以下のようにpickと書かれた箇所を置き換える。置き換える内容に関しては割愛。今回は、fに変更した。

git rebase -i HEAD~3

pick 12345678 TI_CKET-001 コミット1
f 87654321 TI_CKET-001 コミット2
f abcdefgh TI_CKET-001 コミット3

fオプション:一つ前のコミットとまとめる

この場合の意味は、「コミット1にコミット2とコミット3をまとめる」となる

git pull –rebaseでrebase状態でリモートブランチをpullする。

他の方が作業していると、push直前にremoteと内容が異なるケースがある。このとき、pullしてからpushすることが通説となっている。しかしこうすると、Mergeコミットが表示されてしまう。これを防ぐためにはgit pull --rebaseを使う。git rebase mainと同じように、ブランチの切れ目を変更してくれる

これで、push対象が1コミットとなっていればOK!

rebaseの影響範囲を確認する

これがrebaseを行っていないコミット

Commit: ec8103b0574440f64334b3ef305af13e7beaf63f
Parents: d1f70ec41fdfe4513f451f717ee75a41f0e171db
Author: ***@***
Committer: ***@***
Date: Tue Aug 29 2023 14:36:16 GMT+0900 (日本標準時)

これがrebaseを行ったコミット。

AuthorDateとCommiter Dateが追加されている。

Commit: 37c571e699fa335b0214609b3077ee6180b242f1
Parents: ec8103b0574440f64334b3ef305af13e7beaf63f
Author: ***@***
Author Date: Tue Aug 29 2023 17:42:27 GMT+0900 (日本標準時) // これが追加
Committer: ***@***
Committer Date: Thu Aug 31 2023 11:19:54 GMT+0900 (日本標準時) //これが追加

内容が変更されるためコミットIDも変更される。リモートにpushされている最新コミットのIDを控えておき、その数値が変更されていないことを確認しておこう。