コミット前に 'git add'を元に戻すにはどうしたらいいですか?

誤って、Gitにファイルを追加するコマンドを使ってしまいました。

git add myfile.txt

まだgit commitを実行していません。これを元に戻して、これらのファイルがコミットに含まれないようにする方法はありますか?

ソリューション

コミット前に git add を取り消すには、次のようにします。

git reset 

とすると、他には何も変更せずに、現在のインデックス(「これからコミットされる」リスト)から削除されます。

その際には

git reset

をファイル名なしで使用すると、すべての変更を解除することができます。これは、ファイル数が多すぎて1つずつリストアップしていたら時間が足りなくなったときに便利です。

古いバージョンのGitでは、上記のコマンドはそれぞれ git reset HEADgit reset HEAD に相当し、HEAD が未定義 (まだリポジトリに何もコミットしていないため) または曖昧 (HEAD というブランチを作成したため。これはバカげていてやってはいけないことです) な場合は失敗します。しかし、これはGit 1.8.2で変更されたので、最近のバージョンのGitでは最初のコミットを行う前でも上のコマンドを使うことができます。

git reset" (オプションやパラメータなし) は、以下のようなときにエラーになります。 これまでは、履歴に何もコミットしていないときにエラーになっていました。 空のインデックス (あなたが参加していない、存在しないコミットに対応するもの) が表示されます。

解説 (11)

と入力すると

git status

Git は、ステージングされたものなどを、ステージングを解除する方法も含めて教えてくれます。

use "git reset HEAD ..." to unstage

このような状況では、Git は正しいことをするようにうまく誘導してくれます。

注:最近のGitバージョン(1.8.4.x)では、このメッセージが変更されています:

(use "git rm --cached ..." to unstage)
解説 (3)

git removegit rmは、--cached` フラグを付けて使用することができます。試してみてください。

git help rm
解説 (2)