結論
最初のコミットはrebase等がやりづらいので空コミット(--allow-empty
)が良い
例
# リポジトリ作成
git init
# 最初のコミット
git commit --allow-empty -m "first commit"
解説
Gitの最初のコミットを修正したいとなると以下のようなことをする必要がある
-
git commit --amend
で最初のコミットを修正する(コメントで教えてもらいました!)- この方法なら楽にできますね
-
git rebase -i --root
でrebaseする -
git update-ref -d
で参照を更新する
参照
上記のよう面倒くさいので first commit は空コミットにしておくと良い。
こうすることで2回目以降が本質的に意味のあるコミットとなり、修正する場合は通常通りgit rebase
やgit commit --amend
等を利用すれば良くなる。
追記
コメントで教えてもらったように
git rm 最初にコミットしたもの
git add 本当に追加したかったもの
git commit --amend -m "最初のコミット"
とすれば最初のコミットも簡単に変更できました。
良くある例
下記のように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;
していけばいい
わりと、感情的な部分の提案だと思う
との意見をもらった。
確かにそうかもしれない。