801
697

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2016-06-29

結論

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

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

801
697
12

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
801
697

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?