Edited at

Gitの最初のコミットは空コミットにしよう

More than 3 years have passed since last update.


結論

最初のコミットはrebase等がやりづらいので空コミット(--allow-empty)が良い



# リポジトリ作成

git init
# 最初のコミット
git commit --allow-empty -m "first commit"


解説

Gitの最初のコミットを修正したいとなると以下のようなことをする必要がある



  • git rebase -i --rootでrebaseする


  • git update-ref -dで参照を更新する

参照

上記のよう面倒くさいので first commit は空コミットにしておくと良い。

こうすることで2回目以降が本質的に意味のあるコミットとなり、修正する場合は通常通りgit rebasegit commit --amend等を利用すれば良くなる。


良くある例

下記のようにfirst commitに意味のあるコミットが入ってしまうと修正したいときに困る。

(7/3に例を修正しました)


困る例

# Xcodeにて何か簡単なプロジェクトを作成

# (少し実装をしたもの)
# 作ったプロジェクトのディレクトリにてgit init(初期化)
git init
# 現状を追加してコミット
git add .
git commit -m "Xcodeのプロジェクト追加"
# あー、しまった.gitignoreを追加し忘れた!
# 理想的には以下みたいなコミットにしたかった!
# [1] .gitignore追加
# [2] Xcodeプロジェクト追加
# どうしよう:(


追記


GitHubの場合

GitHubのリポジトリ作った後のフローを見ると、最初のコミットはほぼ空のREADMEの追加になっている

echo "# xxx" >> README.md

git init
git add README.md
git commit -m "first commit"
git remote add origin git@github.com:XXX/xxx.git
git push -u origin master


--allow-emptyで最初のコミットを作ることに対して

知り合いから


--allow-empty って、わりと小ネタ機能みたいなもんだし、

履歴を綺麗に保ちたい勢的には、最初に謎に意味のないコミットがあるのはキモいし

別に綺麗じゃなくて良い勢的には、カジュアルに rm -r .git; していけばいい

わりと、感情的な部分の提案だと思う


との意見をもらった。

確かにそうかもしれない。