git add の取り消し方法

    • このページをはてなブックマークに追加

    公開日:2017年02月21日 最終更新日:2019年09月26日

    Git」のaddコマンドを使ってステージング・エリアに追加したインデックス(索引)を取り消す方法について解説します。
    Gitの基本用語などは「Git の使い方 ~リポジトリへ変更内容を記録する方法~」や「Git の使い方 ~リポジトリの作成とコミット~」で説明していますのでご参考下さい。

    目次

    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 ..." to update what will be committed)
    (use "git checkout -- ..." to discard changes in working directory)

    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 ..." to unstage)

    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 ..." to update what will be committed)
    (use "git checkout -- ..." to discard changes in working directory)

    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 ..." to unstage)

    modified: git-sample2.txt

    Changes not staged for commit:
    (use "git add ..." to update what will be committed)
    (use "git checkout -- ..." to discard changes in working directory)

    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_add2

    ターミナルを起動したら、プロンプトに「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」フォルダー

    git_add3

    ▲ページトップへ戻る

    5.2. Gitリポジトリの確認

    「git status」コマンドで管理情報を確認してみます。

    ●[git status]

    $ git status
    On branch master

    Initial commit

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

    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 ..." to unstage)

    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」を取り消すことができました。

    ▲ページトップへ戻る

    【関連文書】 WindowsにGitをインストールする方法
    【関連文書】 Git for Windows の使い方 ~準備編~
    【関連文書】 Git の使い方 ~リポジトリの作成とコミット~
    【関連文書】 Git の使い方 ~リポジトリへ変更内容を記録する方法~
    【関連文書】 git コマンド ~コミットの取り消し~
    【関連文書】 Gitでブランチを作成する方法
    月額単価70万円〜90万円
    勤務地 東京都 渋谷区
    月額単価70万円〜80万円
    勤務地 東京都 目黒区
    月額単価80万円〜100万円
    勤務地 東京都 千代田区
    月額単価80万円〜100万円
    勤務地 東京都 千代田区
    • このページをはてなブックマークに追加

    おすすめ記事

  • ピックアップ

    フリーランス

    【Node.js】バックエンドエンジニア★アドテクノロジー関連企業向け新規開発

    月額単価 :70万円〜90万円

    今後日本でもトレンドになると言われている「Header Bidding」をはじめ アドテクノロジー関連の自社サ...

    フリーランス

    【Ruby】システムエンジニア★女性向け情報コンテンツサービス開発

    月額単価 :70万円〜80万円

    「ファッション」「グルメ」など、欲しい情報が 何でも手に入る女性向けWebアプリケーションの 開発を...

    フリーランス

    【Ruby】システムエンジニア★エネルギー会社比較サービスのWebアプリ開発

    月額単価 :80万円〜100万円

    個人の電力・ガスの自由化に伴い、 事業の勢いに乗るスタートアップ企業にて、 電力・ガスなどのエネ...

    フリーランス

    【Python】システムエンジニア★エネルギー会社比較サービスの分析開発

    月額単価 :80万円〜100万円

    電力・ガスなどのエネルギー会社の料金比較サービスを 運営するスタートアップ企業にて、 電力ビッグ...