git rebase を使用してコミットログをきれいに保つ

Uncategorized

はじめに

本記事ではgit rebaseを使用する際の流れや注意点についてまとめます。
featureブランチで作業した内容をリモートリポジトリにpushし、レビュー指摘をもとに修正して再度コミットして、修正漏れに気がついて再度コミット、、、
ということを繰り返している内にコミットログが見づらくなってしまうことがあると思います。そういった時にgit rebaseを用いることでコミットログをきれいに保つことができます。

git rebaseは危険、初心者はgit mergeを使用しようという旨の記事を目にすることがありますが、
初心者であってもいくつか気をつけるだけで安全にgit rebaseを使用できるので、その方法についてまとめます

手順

まずgit logを実行しまとめるコミットを確認します。

$ git log --graph --oneline
* 1a54b9f (HEAD -> feature/test) commit3
* 9d1409f commit2
* a216696 commit1
* eb45304 (origin/master, origin/HEAD, master) no_comment

上記のようなコミットログで、commit1 ~ commit3 をまとめたい場合、commit1 の直前のコミットハッシュを指定します。
はじめのコミット以外をfixupで一つにまとめる

$ git rebase -i eb45304
pick 9b404a2 commit1
fixup da38f05 commit2
fixup 3ba341f commit3

複数のコミットが一つにまとめられていることが確認できます。

$ git log --graph --oneline
* 8148b67 (HEAD -> feature/test) commit1
* eb45304 (origin/master, origin/HEAD, master) no_comment

すでにリモートリポジトリに push している場合は、このままpushするとコンフリクトします。
その場合、リモートブランチを削除した後、新ブランチとしてpushすることでコンフリクトを回避することができます。

安全にgit rebaseするために

featureブランチのような、そのブランチに対してコミットしているのが自分だけの場合にgit rebaseを使用しましょう。こういった場合はコミット履歴を書き換えても何も問題ありません。
反対に自分以外も使用しているブランチに対してgit rebaseを行う場合はリスクを伴います。

また開発メンバで共有で使用するブランチ(developブランチなど)に直接 push 不可能にすることで、git rebaseした結果を共有ブランチに誤って push してしまうという事故を防ぐことができます。

おわりに

本記事ではgit rebaseを使用する際の流れや注意点についてまとめました。安全にgit rebaseを使用して、振り返った時に分かりやすいコミットログを保ちましょう。
この記事がどなたかの参考になれば幸いです。

参考

コメント