git resetについて本気出して考えてみた
私はいわゆるプログラミングキャンプのメンターをしているのですが
そこで「間違ってcommitしてしまったので元に戻したい」という質問を頂きました
ぼく「そしたらgit resetで...「オプションで付けるsoft, mixed, hardって何ですか?」
. .. ... ....
完全に勉強不足でした
これからエンジニアとして生きていくのにこれをきちんと説明できないのは問題です(◞‸◟)
なので今回はgit resetについて調べてみました
今後同じ質問を頂いた際は僕の記事も紹介できる!!
git resetとは
リポジトリの変更履歴を任意の状態に戻すことができるコマンドです
ただしgit reset コマンドを使用して元に戻すと 、元の状態を復元する方法はありません( ˘ω˘)
git resetの基本オプション
git resetには基本的には --soft, --mixed, --hardの3つのオプションがあります
- soft...HEADの位置のみ元に戻す
- mixed(オプション無し)...HEADの位置とインデックスを元に戻す
- hard...「HEADの位置、インデックス、ワーキングツリー」の全てを元に戻す
ここでHEADの位置、インデックス、ワーキングツリーという言葉が出てきましたが以下のお手製の図を用いて説明します
図の通り現在は状態2が最新の状態です( ˘ω˘)
そこから適当なファイルを編集するとワーキングツリーは状態3、つまり状態が進みます( ˘ω˘)
編集後addしステージングに上げることにより、インデックスが最新の状態になります( ˘ω˘)
そして最後にステージングにあるインデックスをaddすることによりHEADの位置が最新の状態になります( ˘ω˘)
上の図を参考にしていただければ、自分がgit resetコマンド実行時にどのオプションをつければいいかイメージがつくと思います((((´ʘ‿ʘ`))))
イメージとしてはsoftはコミットメッセージの変更、mixed(オプション無し)はaddの見直し・追加、hardは変更そのものの取り消しの時に使用するという感じですかね
それでは明日から台湾旅行に行ってまいります