Help us understand the problem. What is going on with this article?

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

結論

最初のコミットは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 rebasegit 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; していけばいい
わりと、感情的な部分の提案だと思う

との意見をもらった。
確かにそうかもしれない。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away