ファイルへの変更を取り消そう
今回はファイルへの変更を取り消すやり方についてです。
ファイルを色々変更して「どうなったのか分からない」「ぐちゃぐちゃになってしまった」「元の状態にまっさらに戻したい」そういう時のやり方です。
ファイルへの変更を取り消すコマンドは「git checkout」コマンドになります。
特定のファイルの変更を取り消したい場合は「git checkout -- <ファイル名>」。
ディレクトリ毎変更を取り消したい場合は「git checkout -- <ディレクトリ名>」と指定します。
全ファイルの変更をまとめて取り消したい場合は「git checkout -- .」と入力します。「.」というのは任意のファイル全てという意味になります。
$ git checkout -- <ファイル名> $ git checkout -- <ディレクトリ名> # 全変更を取り消す $ git checkout -- .
ちなみに「--」を付けているのは、ブランチ名とファイル名が被った時に、どちらを指しているのかGitが分からなくなるのを避けるためです。
ではイメージで押さえておきましょう。
まずワークツリーに何かファイルがあったとして、そのファイルに変更を加えたとします。
今回はその変更を取り消します。
そのためのコマンドが「git checkout」コマンドです。
どのようにしてGitが実際に変更を取り消しているのか、裏側では何が起こっているのかと言うと、ワークツリーの状態をステージの状態と同じ状態にすると言うのが裏側で起こっていることです。
どういうことかというと、まずステージから「git checkout」で指定されたファイルの情報を取得してきます。
そして取得してきた情報をワークツリーの方に反映させるということをしています。
ステージの情報を取ってきて、それをワークツリーに反映させることで、ワークツリーのファイルの状態をステージと同じにする。
そのことによってファイルへの変更を取り消しています。
実際にやってみよう
ではターミナルを立ち上げて、実際にやってみましょう。
「git_tutorial」ディレクトリに移動します。
まずはファイルの変更からしていきます。
エディタを立ち上げて「index.html」ファイルを編集します。
今回は「<p>git checkout</p>」と追記して保存します。
再度ターミナルに戻り、今の状態を確認します。
「git status」コマンドを入力します。
$ git status On branch main Your branch is ahead of 'origin/main' by 1 commit. (use "git push" to publish your local commits) Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: index.html no changes added to commit (use "git add" and/or "git commit -a")
すると「index.html」ファイルが変更されたと表示されます。
では、この変更を取り消していきます。
「git checkout -- index.html」と入力します。
$ git checkout -- index.html
これで変更が取り消されました。
「git status」コマンドで実際に変更が取り消されたかを確認します。
$ git status On branch main Your branch is ahead of 'origin/main' by 1 commit. (use "git push" to publish your local commits) nothing to commit, working tree clean
変更は何もないと表示されました。
では実際にファイルの中身も確認してみます。
もう一度テキストエディタで「index.html」を開いてみます。
すると先ほど追記した「<p>git checkout</p>」の記載がなくなっています。
このように「git checkout」コマンドを使うことでファイルへの変更を取り消すことができます。
参考図書
独学で挫折しそうになったら、オンラインプログラミングスクール