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
してしまった時は誰しもあると思いますが、そのような時にこのコマンドを覚えてると便利かと思います。
さいごに、記事を書く上で参考にしたサイトのリンクを以下に掲載します。合わせて読んでいただくと良いかと思います。