たなブログ 教養を高めて生涯資産を増やすブログ(`・ω・´)

【GitHub】push前の変更操作を取り消せるコマンドの紹介【3つの方法を理解しよう】

Gitを学ぶ PR

こんにちは、ちくたっく(@tictak_py)です。

今回は、GitHubにpushする「前」に使える変更操作を取り消すコマンドを「3つ」紹介していきます。

その3つの方法をまとめたものが以下となります。

  1. ワークツリー内での作業を取り消す方法
  2. ステージへの追加(git add)を取り消す方法
  3. ローカルリポジトリへの追加(git commit)を取り消して修正する方法

「変更操作を取り消す」全体的なイメージは以下の図のようになります。

今回紹介する「変更取消」の全体イメージ図

いずれもローカル内の話であり、リモートリポジトリである「GitHub」にプッシュする前の操作となります。

こんな方に読んで欲しい記事です

  • ローカル内での変更(git add/git commit等)を取り消せるようになりたい方
  • GitHubで使われている基本的なコマンドを学んでいきたい方

【GitHub】変更操作を取り消す「3つ」のコマンド

【変更取消その1】ワークツリーの作業をなかったことにする

まず最初に、デスクトップ上に「github-basic」というフォルダを作成し、以下のようなテキストファイル「price_list」がある状態で話を進めていきます。

(ここでは理解しやすいようにテキストファイルを用いていますが、実際には自分が使うプログラミング言語で書かれたファイルを利用してみてください。)

デスクトップ「github-basic」内にある「price_list」の内容

ある製品に関する正規の価格表のような内容だと想定してください。そして、このファイルを「git add」してステージへ追加しておきます。

「price_list.txt」をgit addでステージに追加

ここからが本題となります。
ある日、手元にある価格表の内容をなぜか間違えて以下のように書き直して保存していたことが発覚しました。

テキストファイル「price_list.txt」を間違えた状態で保存

その場で間違いに気づけば「Ctrl + Z」で何とかなりますが、既にファイルを閉じていたような場合にはどうすればいいでしょうか?

このような場合に使える方法が「git checkout — <ファイル名>」のコマンドです。
このコマンドを入力し、テキストファイルの中身を確認した結果が以下となります。

「git checkout — <ファイル名>」のコマンドで、ワークツリーの変更を取消

上記のように、テキストファイルの中身が元に戻っているのがわかるかと思います。

「ステージに追加済のファイル」で「ワークツリーのファイル」を上書きしているようなイメージを僕は持っています。ステージのファイルと同じ状態にすることで、結果的に元の状態に戻している感じですね。

そのため、git addコマンドでステージに追加する前の状態で、テキストファイルの変更内容を取り消したいと思っても、以下のようにエラーとなり復元は出来ません。

「git add」せずにテキストファイルの変更内容を取り消そうとした場合

そもそも作業フォルダ内の話ではありますが、「ファイルを間違えて修正して、元の状態がわからなくなった…」という場合でも、git addしていれば復元できる可能性があるので、知っておくといざという時に便利です。

【変更取消その2】ステージへの追加をなかったことにする

続いては、「git add」コマンドでステージに追加した後に取り消す方法を紹介します。
現在の状態を「git status」コマンドで確認しておきます。

現在の状況を確認

すると、「コミットすべき変更があるよ」と言われているので、git add後ということがわかります。これを取り消すためには「git reset HEAD <ファイル名>」のコマンドを使用します。

「git reset」コマンドの入力により、ステージへの追加を取り消せる

上記画面の赤枠部分を確認してみると、ステージに追加済ファイルを対象にコマンドを入力することで、「git add」する前の状態になっていることがわかるかと思います。

ちなみにこのコマンドは「git status」時に表示されているコマンド(上図アンダーバー部分)のことです。

個人的に「git addした後に取り消したい」というニーズは少ないのですが、使い方を知っておけば何かあった時に使えるかもしれないので参考にしてみてください。

【変更取消その3】コミット操作を取り消して修正する

最後は、「git commit」コマンド操作を取り消して修正したい時に使える方法です。
「コミット時のメッセージを書き直したい」ような時にも使えます。

現在、取消操作によってunstageされているので、コミットまで一気に進めます。
コミット時に、間違えたメッセージ「item list」(正しくはprice list)を入力したとします。

「git commit」時に誤った内容を送信

このような時に使える方法が「git commit — amend」コマンドです。
コミット内容そのものを取り消すというよりは、ステージにあるファイルで上書きするイメージです。

「git commit — amend」コマンドにより、コミットメッセージを修正

このコマンドを入力すると、以下のようにコミットメッセージを入力する画面になります。「item list」となっていた記述を「price list」と修正して確定しておきます。これで修正OKです。

コミットメッセージの修正画面

本当に内容が修正されているのか、プッシュをしてGitHub上で表示される内容を確認してみます。

GitHubにプッシュ

すると、以下のように「price list」と修正後の内容が表示されていることがわかります。コミットメッセージを間違えてしまったとしても、プッシュしていない限りはこの方法で修正出来るので、慌てずに使えるようにしてみてください。

GitHub上のメッセージが正しいことを確認

さいごに

今回は、GitHubにプッシュする前の変更操作を取り消すコマンドを「3つ」見てきました。いずれも知っておくと役に立つ時が来るので、いざという時のために使えるようにしてみてください。

記事内で出てきた「git status」については以下記事でも紹介しているので、今一つ理解出来なかった方は参考にしてみてください。

では今回はこのへんで。