Edited at

社内にコミットログ警察がいるのでrebaseを覚える


はじめに

新卒1年目のピッチピチのエンジニアです。

うちの会社にはコミットログ警察がいます。(適当なコミットログを発見すると怒る)

僕はコミットログを全く気にしないタイプだったので

git commit -m "指摘されたところの修正"

ってコミットしてみました。

怒られました。

やっぱりレビュワーに優しいコミットの積み方を身につけないといけませんね。

ここでは怒られないためにrebaseでコミットログをいじいじする方法を説明したいと思います。

※本当に最低限です。ここでやってること以外にもたくさんできることはあります。


なんのためにrebaseを使うのか?

怒られないためです

コミットログを書き換えることができます。

例えば

レビューの修正

タイポ修正
○○の不具合修正
○○の機能を追加

みたいなログがあったとします。

これをrebaseすると

○○の機能を追加

の一つにまとめることができます。

とかコミットを編集したり、削除したり。

色々できます。


rebaseの使い方

・コミットのまとめかた

・コミットの編集のやり方

・コンフリクトした時

について書きます


コミットをまとめる

まずコミットをまとめるときにはログをみないといけません。

git log --oneline

ってしましょう。

4f2098458 (HEAD -> hoge) レビューを受けて修正2 

0e9fe3830 レビューを受けて修正
b922ae9fe ○○修正
d83b6f6ac ●●作成
bca454038 ○○作成
2c5f58f07 (origin/feature/hoge, feature/hoge) hogehogeho

のようなログが出てくるはずです。

〇〇作成〇〇修正を合体

●●作成レビューを受けて修正レビューを受けて修正2を合体させたいと思います。

rebaseするときは、いじりたいログの中で一番下のものの一つ下のcommit idをコピーしましょう。

ここだといじりたいログの中で一番下にあるのが○○作成なので2c5f58f07をコピーします。

git rebase -i 2c5f58f07

とします。

pick bca454038 ○○作成

pick d83b6f6ac ●●作成
pick b922ae9fe ○○修正
pick 0e9fe3830 レビューを受けて修正
pick 4f2098458 レビューを受けて修正2

こんな感じになります。

これを

pick bca454038 ○○作成

f b922ae9fe ○○修正
pick d83b6f6ac ●●作成
f 0e9fe3830 レビューを受けて修正
f 4f2098458 レビューを受けて修正2

こんな感じにします。



親のログの下に合体させたいログを持ってきてpickの部分をfに変更してあげます。

これで保存するとログが綺麗にまとまってくれます。

ログを確認したらこうなってるはずです。

bca454038 ○○作成

d83b6f6ac ●●作成

※vimの使い方を少しわかってないといけません。わからない人は勉強してください。


コミットの編集方法

コミットをまとめるのも一つの方法ですが、修正するときにコミットを編集すればいいです。

○○修正とかレビューを受けて修正というコミットを積む前に修正したいコミットに直接修正を加えることができます。

pickの部分をeにすればそこを編集することができます。

e bca454038 ○○作成

pick d83b6f6ac ●●作成

修正をしたら

git add .

git rebase --continue

で編集できます。


コンフリクトした時

割とします。

コンフリクトしてる部分を直して

git add .

git rebase --continue

コンフリクトがしっかり治るまでこれを繰り返します。

途中でわけわかんねえ無理だああってなったとき

git rebase --abort

で一からやり直せるのでコンフリクト恐れなくていいです。


さいごに

rebaseは過去を書き換えちゃうので、誰かと同じブランチで作業してたりする時は注意が必要です。

何か指摘あればコメントにお願いします!!