Gitの初回コミットは空にしとくと便利

Gitを使う場合、ローカルで雑にコミットを積み上げておいて、push前に履歴を整理する、というのは割とよくあるフローだと思う。 この時基本はgit rebaseを使うはずだけど、初回コミットに関してはgit rebaseが使えない。 最初のコミットにはリベース元となる親コミットが存在しないから当たり前だけど、それでも初回コミットを含めて履歴を整理したい事もある。 --rootというオプションをつける方法はあるが、できれば初回コミットとか気にせず普通にリベースしたい。

そこで、例えば初回コミットでは空の.gitignoreだけを追加するようにするとちょっと楽になる。 こうすればソースコードなどの管理対象ファイルは常に2つ目以降のコミットになるから、リベースがしやすい。
またこの初回コミットはどのリポジトリでも共通なので自動化できる。 自分はsetupという名のエイリアスをGitに用意して、git initの代わりにこれで初期化を行うようにしている。内容は以下:

git init \
    && touch .gitignore \
    && git add .gitignore \
    && git commit -m 'Init repository'

後は普通にコミットを重ねていけば、何も考えずリベースできる。
最初は--allow-emptyで初回コミットの内容を本当に空にしてたけど、.gitignoreはどんなリポジトリでもほぼ必ず使うので最初から作るようにした。

そもそも最初のコミットには履歴のスタート地点を作るという責務が既に1つある気がするので、 初回コミットにはそれだけをやらせて、管理対象のファイルを追加していくのは2回目以降のコミットでやっていく方が綺麗なのでは、という思いもある。