Gitのresetコマンドを使ってみた

はじめに

この記事では、「Gitのresetコマンドの意味と実際に使うとどうなるか」について書いています。

Gitにはたくさんのコマンドがあり、また自分は普段TortoiseGitを使っていて全然コマンドを覚えてないので、ちゃんと自分でコマンドを試しながら学んでみるべく記事にしました。

自分に向けた備忘録の意味もありますが、「Gitのコマンドにまだ習熟してない人」や「Gitのresetコマンドがどういうものか知りたい」な人の一助になれば嬉しいです。

要点だけ

  • git resetを使うと、特定の時点までファイルを巻き戻すことができます。
  • オプションによりどこまで戻すかを指定することができます。

前提(環境)

以下の環境、フォルダ構成で実験をしていきます。

sample
├ .git
│  └ ...(省略)...
├ alpha.txt  <- 変更されており、また`git add`でインデックス領域にステージングしたファイル
├ beta.txt   <- 変更されているがインデックス領域にステージングしていないファイル
└ gamma.txt  <- Gitで管理されていないファイル

試してみた内容

現在の状態をgit status -sで確認してみると以下のようになります。

 M alpha.txt
M  beta.txt
?? gamma.txt

ちなみに、ファイル名の横にある文字は、それぞれ

  • M_: 変更されており、またgit addでインデックス領域にステージングしたファイル
  • _M: 変更されているがインデックス領域にステージングしていないファイル
  • ??: 管理対象外のファイル

を表しています。

ではgit resetを実行してみましょう。実行すると下記テキストが出力されます。

Unstaged changes after reset:
M       alpha.txt
M       beta.txt

2つのファイルがUnstagedになったと書かれています。

git status -sで確認してみましょう

 M alpha.txt
 M beta.txt
?? gamma.txt

ステージングされていたalpha.txtがステージングしていない状態になっており、git resetで出力されたテキストの通りになっています。

git resetのオプション

git resetを行うとステージングをしていない状態に戻りましたが、オプションをつけることで他のこともできるようになります。(ここでは詳細は説明せず簡単に概要だけ紹介します)

  • git reset --soft: commitのみ取り消し、コミットをする直前の状態に戻ります。
  • git reset --mixed(またはオプションなし): commitとaddの取り消します。
  • git reset --hard(全部を取り消し(HEADの位置・インデックス・ワーキングツリーが修正される)

おわりに

「Gitのresetコマンドの意味と実際に使うとどうなるか」について解説しました。

間違ってgit addしてしまった、git commitしてしまった時は誰しもあると思いますが、そのような時にこのコマンドを覚えてると便利かと思います。

さいごに、記事を書く上で参考にしたサイトのリンクを以下に掲載します。合わせて読んでいただくと良いかと思います。

tech-blog.rakus.co.jp

qiita.com