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インフラはサービス開始から10年以上『エンジニアの生涯価値の向上』をミッションに掲げ、
多くのエンジニアの就業を支援してきました。
転職をお考えの方は気軽にご登録・ご相談ください。
新着案件New Job
-
【高額年収】/【CCNA取得者歓迎】/ネットワークの構築/BIG-IP/東京都千代田区/【WEB面談可】/在宅ワーク/20代~30代の方活躍中
年収540万~540万円東京都千代田区(神保町駅) -
東京都中央区/【WEB面談可/インフラサーバ経験者/20~40代の方活躍中】/在宅ワーク
年収600万~600万円東京都中央区(小伝馬町駅) -
【高額年収】/インフラ構築支援/東京都港区/【WEB面談可/インフラサーバ経験者/20~40代の方活躍中】/在宅ワーク
年収960万~960万円東京都港区(新橋駅) -
ガバナンス推進、セキュリティ基盤支援/東京都港区/【WEB面談可】/在宅ワーク/20代~40代の方活躍中
年収780万~780万円東京都港区(新橋駅) -
カー用品販売会社の情報システム運用/東京都千代田区/【WEB面談可/インフラサーバ経験者/20~40代の方活躍中】/テレワーク
年収576万~576万円東京都千代田区(水道橋駅) -
ネットワーク構築、検証/東京都渋谷区/【WEB面談可】/テレワーク/20代~40代の方活躍中
年収540万~540万円東京都渋谷区(渋谷駅)
人気記事Popular Posts
-
PowerShellの文字コードについて解説!文字化けで困らないための対処法
2021-01-19 2021-05-28 -
ベンダーとはどういう意味なのか|ベンダーとつくIT用語10個
2020-10-29 2022-02-22 -
PowerShellでファイルコピーをする方法とは?PowerShellのインストール方法も紹介!
2021-03-10 -
PowerShellでのOut-Fileコマンドの使い方|各オプションもご紹介
2021-03-09 2021-05-28 -
DataGridViewの使い方4つ|行の追加や削除の方法を解説
2020-12-28 2022-01-18 -
PowerShellでのWhere-Objectの使い方とは?Where-Objectを正しく理解しよう
2021-03-10 2021-12-23 -
Linuxでログを調査する方法|syslogや/var/log/についても解説
2020-07-31 2021-12-06 -
PowerShellでの正規表現の使い方について紹介!正規表現を正しく使いこなそう!
2021-01-20 2021-05-28 -
PowerShellのスクリプトとは?スクリプトの実行方法やパラメータの指定方法を紹介!
2021-02-19 -
IPv4とIPv6の違い8つとは?IPv4 over IPv6についても解説
2020-10-29 2020-11-16 -
Windows上にLinuxを導入する方法3選|WSL2に使えるターミナルも紹介
2020-09-25 2021-11-26 -
PowerShellのStart-Processの使用方法とは? Start-Processを使いこなそう!
2021-03-02 2021-05-28