「Git」のaddコマンドを使ってステージング・エリアに追加したインデックス(索引)を取り消す方法について解説します。
Gitの基本用語などは「Git の使い方 ~リポジトリへ変更内容を記録する方法~」や「Git の使い方 ~リポジトリの作成とコミット~」で説明していますのでご参考下さい。
目次
1.1. Gitの初期化(git init)からコミット(git commit)まで
1.2. Git のインストールと準備
2. 対象ファイルをステージング・エリアに登録する【git add】
2.1. ローカルリポジトリの状態を確認する( git status )
2.2. ファイルの編集と git add コマンドの実行
3. git add の取り消し【git reset HEAD】
3.1. ステージング履歴の取り消し( git reset HEAD )
3.2. git add 取り消しの確認
4. 特定ファイルを指定して git add を取り消す【git reset HEAD <FILE>】
5. 初回コミット前の git add を取り消す【git rm --cached <FILE>】
5.1. 新規ローカルリポジトリの作成( git init )
5.2. Gitリポジトリの確認
5.3. 初回 git addコマンドの実行
5.4. 「git rm --cached」コマンドの実行
1. Gitの基本操作
1.1. Gitの初期化(git init)からコミット(git commit)まで
「Git」を使ってバージョン管理を行うには、まず管理対象のファイルやフォルダーを管理対象とする為に、「git init」コマンドで「Git リポジトリの初期化」を行います。管理対象のファイルを「git add」コマンドでGitの追跡対象とする事で、ファイルの変更履歴を記録・保存(git commit)する為の準備をします。
管理対象のファイルを変更履歴を保存する為の、コミット(commit)コマンドを実行するには、「git add」コマンドを実行する必要がありますが、この作業のことを、「ステージング・エリアに登録する」、「インデックス(索引)に追加する」などと呼びます。
1.2. Git のインストールと準備
本コラムでは、コマンドラインベースの Git アプリである「Git For Windows(https://git-for-windows.github.io/)」を使って、対象ファイルをGitのステージング・エリアに追加(git add)する方法とその追加を取り消す方法について解説します。
「Git」をインストールしていない場合は、「
WindowsにGitをインストールする方法」を参考に Git 」をインストールして実際にコマンドを打ちながら確認してみて下さい。
今回は、「Git の使い方 ~リポジトリへ変更内容を記録する方法~」で作成した二つのファイルを使って一連の作業を確認します。作業フォルダー「Git-ws」の中にはファーストコミット済みのサンプルファイル「git-sample.txt」と「git-sample2.txt」が入った状態です。
●「Git-ws」フォルダー
2. 対象ファイルをステージング・エリアに登録する【git add】
2.1. ローカルリポジトリの状態を確認する( git status )
Windowsのスタートメニューから[すべてのアプリ]→[Git]→[Git Bash]を選択してGitを起動して下さい。
●Git Bash
プロンプトに「git status」を入力して現在のファイルの状態を確認してみましょう。作業フォルダー内には、ステージング・エリアに登録されたファイルはない状態です。
$ git status
●[git status]
$ git status
On branch master
nothing to commit, working tree clean
2.2. ファイルの編集と git add コマンドの実行
作業フォルダー「Git-ws」内の二つのファイル(git-sample.txt, git-sample2.txt)を編集します。
●[git status]
$ git status
On branch master
Changes not staged for commit:
(use "git add
(use "git checkout --
modified: git-sample.txt
modified: git-sample2.txt
no changes added to commit (use "git add" and/or "git commit -a")
作業フォルダー内のファイルを変更した場合は「git status」コマンドでどのような変更があったのかを確認する事が可能です。二つのファイルが変更された(modified:)というメッセージが表示されます。ファイルを編集しただけではステージング・エリアに登録されません。
ファイルは変更されたけれども、「Changes not staged for commit」コミットする為のステージング・エリアに追加されていないとのメッセージを確認することができます。
この二つのファイルを git add コマンドでステージング・エリアに登録します。
$ git add [ファイル名]
●[git add]
$ git add .
ピリオド「"."」はカレントフォルダーの全てを表しています。ファイル名やフォルダー名を指定して特定のファイルなどをステージング・エリアに登録する事もできます。
●[git status]
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD
modified: git-sample.txt
modified: git-sample2.txt
「git status」で現在の状態を確認すると、「Changes to be committed:」とあります。二つのファイルの変更がステージング・エリアに登録され、コミットの準備が整いました。
3. git add の取り消し【git reset HEAD】
3.1. ステージング履歴の取り消し(git reset HEAD )
通常であれば「git add」コマンドでステージングされたファイルは、コミットする事でリポジトリに登録する事になりますが、誤ったステージングやファイルの変更を反映させたくない場合もあります。「git add」を取り消したい場合「get reset」コマンドを使います。「git status」で確認したメッセージにもある通り、「git reset HEAD [ファイル名/ファイルパス]」でステージした状態を取り消す事ができます。
$ git reset HEAD [ファイル名/ファイルパス]
●[git reset HEAD]
$ git reset HEAD
Unstaged changes after reset:
M git-sample.txt
M git-sample2.txt
引数に何も指定しないと、「git add」でステージング・エリアにある全てのファイルのインデックス(索引)を削除します。あくまでもインデックス(索引)を取り消すだけなので、ファイルの編集状態が元にもどるわけではありません。
3.2. git add 取り消しの確認
「git status」コマンドで、ステージング・エリアの登録が取り消されているのが分かります。
●[git status]
$ git status
On branch master
Changes not staged for commit:
(use "git add
(use "git checkout --
modified: git-sample.txt
modified: git-sample2.txt
no changes added to commit (use "git add" and/or "git commit -a")
「Changes not staged for commit:」のメッセージが表示されていれば、「git add」コマンドを実行する前の状態に戻っている証拠です。
4. 特定ファイルを指定して git add を取り消す
【git reset HEAD <FILE>】
すべてのファイルではなく一部のファイルの「git add」を取り消す場合は「git reset」コマンドに取り消したいファイル名を指定する事でステージング・エリアへの登録を取り消すことができます。
$ git reset HEAD [ファイル名/ファイルパス]
●[git reset]
$ git reset git-sample.txt
Unstaged changes after reset:
M git-sample.txt
ステージングの状態を確認してみましょう。
●[git status]
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD
modified: git-sample2.txt
Changes not staged for commit:
(use "git add
(use "git checkout --
modified: git-sample.txt
「git-sample2.txt」はステージング・エリアに登録された状態(Changes to be committed:)で、「git add」の取り消しをした「git-sample.txt」ファイルがステージング・エリアに追加されていない(Changes not staged for commit:)のが分かります。
5. 初回コミット前の git add を取り消す
【git rm --cached <FILE>】
新規フォルダを「Git」でバージョン管理するために、新規でリポジトリを作成し「git add」コマンドでステージング・エリアにファイルを追加したとします。初回コミット前に「git add」を取り消す場合は上記の「git reset」コマンドを使うのではなく、「git rm」コマンドを使います。実際にコマンドを見てみましょう。
5.1. 新規ローカルリポジトリの作成(git init)
新規フォルダーの「Git-ws2」をGit管理下に置くためにGit リポジトリの初期化をします。「Git-ws2」フォルダー内には、「git-sample.txt」ファイルがある状態です。フォルダー内で右クリックをしてメニューから[Git Bash Here]を選択してGitを起動します。
●「Git Bash」の起動
ターミナルを起動したら、プロンプトに「git init」と入力し、リポジトリの初期化作業を行います。「git init」コマンドを実行するとリポジトリに必要なファイルが入っている「.git」フォルダーが作成されます。「git add」コマンド実行前のため、管理ファイル情報を持たないリポジトリになります。
$ git init
●[git init]
$ git init
Initialized empty Git repository in C:/Users/UserName/Documents/Git-ws2/.git/
●「.git」フォルダー
5.2. Gitリポジトリの確認
「git status」コマンドで管理情報を確認してみます。
●[git status]
$ git status
On branch master
Initial commit
Untracked files:
(use "git add
git-sample.txt
nothing added to commit but untracked files present (use "git add" to track)
初回のコミットであることを表す「Initial commit」のメッセージ後に管理下にない(Untracked files:)ファイル情報(git-sample.txt)が表示されています。Git の管理下に置くために、ファイルを追跡(track)対象とするには、「git add」コマンドを使って下さいとのヘルプも表示されています。
5.3. 初回 git addコマンドの実行
「git add」コマンドで「git-sample.txt」ファイルをステージング・エリアに追加します。
●[git add]
$ git add git-sample.txt
もう一度ファイルの状態を確認してみましょう。
●[git status]
$ git status
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached
new file: git-sample.txt
「git-sample.txt」ファイルがステージング・エリアに追加された(コミットの準備ができた)ことを表す「Changes to be committed:」が表示されています。また括弧内のメッセージを見てみると、ステージング・エリアへの追加を取り消すためのコマンド[git rm --cached
試しにここで、「git reset HEAD」コマンドを打ってみましょう。
●[git reset]
$ git reset HEAD
fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git
エラーが表示され、「git add」コマンドの取り消しができません。何故でしょうか?
「git reset」コマンドはある状態まで戻すコマンドです。引数の「HEAD」は「最新のコミット」という意味を持ちます。つまり「git reset HEAD」は、最新のコミットの状態に戻すというコマンドですので、一度もコミットしていない状態でこのコマンドを使う事はできません。その為、「git stasus」のメッセージには「git rm」コマンドを使って下さいと表示されています。
5.4. 「git rm --cached」コマンドの実行
それでは「git rm --cached」コマンドを使って、ステージング・エリアへ追加した「git-sample.txt」の取り消しをしてみましょう。
$ git rm --cached [ファイル名]
●[git rm]
$ git rm --cached git-sample.txt
rm 'git-sample.txt'
「git rm --cached <ファイル名>」で初回コミット前の「git add」を取り消すことができました。
当サイトプロエンジニアのコンサルタントが厳選したおすすめのフリーランス案件特集はこちら
特集ページから案件への応募も可能です!
実際にフリーランスエンジニアとして活躍されている方のインタビューはこちら