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

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 ファイル名と打つことで、特定ファイルへの変更をステージ状態にすることができます。またドットを指定することで変更した全てのファイルを一括でステージ状態にできます。

 

ステージとは

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コマンドといい、ファイルやリポジトリの状態を戻すためのコマンドになります。

git resetはステージ状態のファイルをなかったことにする。つまりリセットするコマンドになります。ちなみにではありますが、HEADとは最新のcommit番号を指します。

特定のファイルの変更だけ取り消したい場合は以下のようにHEADではなくファイル名を指定することでリセットすることができます。

git resetコマンドによって取り消しがされるのはリポジトリの状態のみになります。つまりstagedからmodifiedに変更されるだけであり、ファイルへの変更自体はそのままであるという点には注意です。
https://git-scm.com/book/en/v2/Git-Basics-Recording-Changes-to-the-Repository

もし仮に、git addの取り消しだけではなく、ファイルへの変更も取り消したい場合は–hardオプションをつけることで可能になります。

 

次に具体例を示しながら紹介していきます。

gitリポジトリをcloneする

まずは作業を行うためのgitリポジトリを用意していきます。まずはgifortrainingのサンプルリポジトリをcloneします。git cloneコマンドを使うことでリモートリポジトリをローカルにcloneすることができます。

cloneが成功するとhellogitworldというディレクトリが作成されるのでcdコマンドで移動します。

 

ファイルを変更する

早速ですが、取り消しをテストするためにリポジトリをmodified状態に変更していきます。今回は簡単な例として適当にファイルを追加します。以下の例ではechoで出力したテキストをファイルに入力しています。

catコマンドを実行し、test.txtファイルが作成されたことを確認してください。

 

リポジトリの状態を確認する

git statusコマンドを実行することで、リポジトリの状態を確認します。Gitのローカルリポジトリにcommitされている最新の状態と、現在編集中の状態を比較することができます。このコマンドを使うことで、ファイルごとにmodifiedやstagedなどの情報を知ることができます。

この例では、先ほど追加したtest.txtの状態がmodifiedという表示がされていることを確認できます。

git addで変更をステージングする

先ほどechoコマンドで追加したtest.txtファイルをgit addコマンドを使ってmodifiedからstagedにしていきます。git add <ファイル名>と打つことで実行できます。

これで晴れてmodified状態にすることができました。次に実際に取り消し作業を実行していきます。

git addを取り消す

先ほどgit addコマンドで追加したtest.txtをstagedからmodifiedにするためにresetコマンドを実行していきます。以前紹介した通り、git reset ファイル名と打つことで実行できます。

再度statusコマンドを実行することでtest.txtがstaged状態からmodified状態に変更されたことを確認することができます。また、–hardオプションによる編集の取り消しを行っていないので、test.txtは消されていないことがわかります。確認したい場合はcatやlsコマンドを実行すると良いでしょう。

test.txtの変更自体無かったことにしたい場合は上記のコマンドではなく以下の通り行うことで可能になります。この場合はtest.txtそのものが消えてしまうのでstaged状態からunmodified状態に遷移します。

 

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オプションをつけることで可能になるという補足もいたしました。

インフラエンジニア専門の転職サイト「FEnetインフラ」

FEnetインフラはサービス開始から10年以上『エンジニアの生涯価値の向上』をミッションに掲げ、多くのエンジニアの就業を支援してきました。

転職をお考えの方は気軽にご登録・ご相談ください。