すずけんメモ

技術メモです

初回のコミットを取り消したいときにはgit update-refを使う

gitで間違えて最初のコミットをしてしまった場合の話。コミットに含めたいファイルとかをついうっかり追加してしまった場合の対処法。

この場合、git resetなどで戻ることはできない。git update-refを使おう。

サンプル

-> % cd /tmp/; mkdir sample-git; cd sample-git
-> % git init
Initialized empty Git repository in /private/tmp/sample-git/.git/
-> % git add
-> % touch README
-> % git status
On branch master

Initial commit

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        README

nothing added to commit but untracked files present (use "git add" to track)

-> % git add .

-> % git commit -m 'first commit'
[master (root-commit) 801a68b] first commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README

-> % git status
On branch master
nothing to commit, working directory clean

このときのgit logは以下のようになっている。

commit 801a68ba564098cb41f1dcaefec9fb3eb0ab7472
Author: Kenta Suzuki <myaddress@sample.com>
Date:   Fri Mar 28 09:57:29 2014 +0900

    first commit

ここでgit update-refする。

-> % git update-ref -d HEAD

-> % git status
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   README

これでコミット前の状態に戻ることができる。もちろん初回コミットの場合以外にも使えるが、普段はgit reset --soft HEAD^するのでこういうケースで困ることはあまりないと思う。

まとめ

初回コミットくらい落ち着いて操作しましょう。(反省