git add取り消しについて|Gitによるバージョン管理の流れとgit resetコマンドでgit addを取り消し

git add取り消しについて
今回はバージョン管理システムであるGitのコマンドのうちの一つであるgit addの取り消し方について紹介していきます。
前提知識としてGitについて軽くおさらいし、git addの仕組みについてまずは紹介いたします。そしてgit addの取り消しを行うためのコマンドについて具体例も交えながら紹介いたします。
Gitによるバージョン管理の流れ
git addやその取り消しを説明するにあたって、まずは前提知識となるバージョン管理システムGitについて紹介いたします。そして、バージョン管理がどのようにの行われるかについて軽く説明していきます。
Gitとは
Gitとは分散バージョン管理システムであり、プログラムコードなどのテキストファイルの更新管理をするためのシステムです。作業を行っているPC(ローカル)とgithubやホスティングしているサーバ(リモート)の複数でコードを管理することができます。
コードを管理する場所が複数あるため、分散バージョン管理システムと呼ばれています。
git addコマンドとは
git addコマンドはGitのバージョン管理のためのコマンドの一つで、変更したファイルをステージと呼ばれる状態にするためのものです。
以下のようにgit add ファイル名と打つことで、特定ファイルへの変更をステージ状態にすることができます。またドットを指定することで変更した全てのファイルを一括でステージ状態にできます。
1
2
3
4
5
|
git add ファイル名
git add .
|
ステージとは
git add コマンドによってステージ状態になることを説明しました。次にステージというものについて説明いたします。
Gitではファイルの状態を、Unmodified、Modified、Stagedの3つで定義しています。
Unmodifiedは名前の通り変更されていない状態を指します。git initをした状態や、作業をし終えgit pushによってGitに登録した直後などに当たります。
一方でModifiedは変更されている状態を指します。コーディングしている最中のようにファイルを更新・追加・削除するとModifiedという状態になります。
そして、Stagedはgit addによって遷移する状態のことを指します。Gitに変更を登録する前の段階を指します。簡潔に言うとStagedとはGitのリポジトリに登録される前の準備状態といえます。
git resetコマンドでgit addを取り消す
ここまでGitとは何か、git addコマンドとはなにか、そしてgit addコマンドによってステージ状態になるという説明をいたしました。本題のgit addを取り消す方法について紹介していきます。
git addを取り消したい場合は、作業リポジトリで以下のようなコマンドを実行する必要があります。これはgit resetコマンドといい、ファイルやリポジトリの状態を戻すためのコマンドになります。
1
2
3
|
git reset HEAD
|
git resetはステージ状態のファイルをなかったことにする。つまりリセットするコマンドになります。ちなみにではありますが、HEADとは最新のcommit番号を指します。
特定のファイルの変更だけ取り消したい場合は以下のようにHEADではなくファイル名を指定することでリセットすることができます。
1
2
3
|
git reset ファイル名
|
git resetコマンドによって取り消しがされるのはリポジトリの状態のみになります。つまりstagedからmodifiedに変更されるだけであり、ファイルへの変更自体はそのままであるという点には注意です。
https://git-scm.com/book/en/v2/Git-Basics-Recording-Changes-to-the-Repository
もし仮に、git addの取り消しだけではなく、ファイルへの変更も取り消したい場合は–hardオプションをつけることで可能になります。
1
2
3
|
git reset --hard
|
次に具体例を示しながら紹介していきます。
gitリポジトリをcloneする
まずは作業を行うためのgitリポジトリを用意していきます。まずはgifortrainingのサンプルリポジトリをcloneします。git cloneコマンドを使うことでリモートリポジトリをローカルにcloneすることができます。
cloneが成功するとhellogitworldというディレクトリが作成されるのでcdコマンドで移動します。
1
2
3
4
|
git clone https://github.com/githubtraining/hellogitworld.git
cd hellogitworld
|
ファイルを変更する
早速ですが、取り消しをテストするためにリポジトリをmodified状態に変更していきます。今回は簡単な例として適当にファイルを追加します。以下の例ではechoで出力したテキストをファイルに入力しています。
catコマンドを実行し、test.txtファイルが作成されたことを確認してください。
1
2
3
4
|
echo "this is test" >> test.txt
cat test.txt
|
リポジトリの状態を確認する
git statusコマンドを実行することで、リポジトリの状態を確認します。Gitのローカルリポジトリにcommitされている最新の状態と、現在編集中の状態を比較することができます。このコマンドを使うことで、ファイルごとにmodifiedやstagedなどの情報を知ることができます。
この例では、先ほど追加したtest.txtの状態がmodifiedという表示がされていることを確認できます。
1
|
git status
|
git addで変更をステージングする
先ほどechoコマンドで追加したtest.txtファイルをgit addコマンドを使ってmodifiedからstagedにしていきます。git add <ファイル名>と打つことで実行できます。
1
2
3
4
5
6
7
|
# stagedにする
git add test.txt
# statusコマンドでstagedになっていることを確認する
git status
|
これで晴れてmodified状態にすることができました。次に実際に取り消し作業を実行していきます。
git addを取り消す
先ほどgit addコマンドで追加したtest.txtをstagedからmodifiedにするためにresetコマンドを実行していきます。以前紹介した通り、git reset ファイル名と打つことで実行できます。
再度statusコマンドを実行することでtest.txtがstaged状態からmodified状態に変更されたことを確認することができます。また、–hardオプションによる編集の取り消しを行っていないので、test.txtは消されていないことがわかります。確認したい場合はcatやlsコマンドを実行すると良いでしょう。
1
2
3
4
5
|
git reset test.txt
git status
cat test.txt
|
test.txtの変更自体無かったことにしたい場合は上記のコマンドではなく以下の通り行うことで可能になります。この場合はtest.txtそのものが消えてしまうのでstaged状態からunmodified状態に遷移します。
1
2
3
4
|
git reset --hard HEAD
git status
|
git resetコマンドでgit addを取り消そう
今回はバージョン管理システムであるGitのコマンドのうちの一つであるgit addの取り消し方について紹介いたしました。
git add取り消しを説明する前に前提知識としてGitについて説明いたしました。そしてGitが管理している3つの状態unmodified、modified、stagedについて説明いたしました。
本題のgit addの取り消しについてはgit resetコマンドを実行することで可能になります。ファイルを指定したり、リポジトリ全体の取り消しの2つが可能です。
また、git resetによる取り消しはあくまでstaged状態からmodified状態への遷移であると説明いたしました。つまり修正内容は残ります。
仮に、ファイルの編集もなかったことにしたい場合はgit reset –hardオプションをつけることで可能になるという補足もいたしました。
ネプラス株式会社はサービス開始から10年以上
『エンジニアの生涯価値の向上』をミッションに掲げ、
多くのインフラエンジニア・ネットワークエンジニアの就業を支援してきました。
ネプラス株式会社はこんな会社です
秋葉原オフィスにはネプラス株式会社をはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
インフラ業界に特化
ネットワーク・サーバー・データベース等、ITインフラ業界に特化。Cisco Systemsプレミアパートナーをはじめ各種ベンダーのパートナー企業です。
業界を知り尽くしているからこそ大手の取引先企業、経験豊富なエンジニアに選ばれています。
-
正社員なのにフリーランスのような働き方
正社員の方でも希望を聞いたうえでプロジェクトをアサインさせていただいており、フリーランスのような働き方が可能。帰社日もありません。
プロジェクト終了後もすぐに次の案件をご紹介させていただきますのでご安心ください。
-
大手直取引の高額案件
案件のほとんどが大手SIerやエンドユーザーからの直取引のためエンジニアの皆様へに高く還元できています。
Ciscoをはじめ、Juniper、Azure、Linux、AWS等インフラに特化した常時300件以上の案件があります。
-
スキルアップ支援
不要なコストを削減し、その分エンジニアの方へのスキルアップ支援(ネットワーク機器貸出、合格時の受験費用支給など)や給与で還元しています。
受験費用例)CCNP,CCIE:6-20万円、JNCIS:3-4万円、AWS:1-3万円など
※業務に関連する一定の資格のみ。各種条件がありますので詳しくは担当者へにお尋ねください。
-
現給与を保証します!※
前職の給与保証しており、昨年度は100%の方が給与アップを実現。収入面の不安がある方でも安心して入社していただけます。
※適用にはインフラエンジニアの業務経験1年以上、等一定の条件がございます。
-
インセンティブ制度
ネットワーク機器の販売・レンタル事業等、売上に貢献いただいた方にはインセンティブをお支払いしています。
取引先企業とエンジニア側、双方にメリットがあり大変好評をいただいています。
-
社会保険・福利厚生
社員の方は、社会保険を完備。健康保険は業界内で最も評価の高い「関東ITソフトウェア健康保険組合」です。
さらに様々なサービスをお得に利用できるベネフィットステーションにも加入いただきます。
-
東証プライム上場企業グループ
ネプラスは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
ネプラス株式会社に興味を持った方へ
ネプラス株式会社では、インフラエンジニアを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
オンライン面接も随時受付中。ぜひお気軽にご応募ください。

