気まぐれ更新

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の位置、インデックス、ワーキングツリーという言葉が出てきましたが以下のお手製の図を用いて説明します

f:id:yukisaibai:20160223185901j:plain

図の通り現在は状態2が最新の状態です( ˘ω˘)

f:id:yukisaibai:20160223185910j:plain

そこから適当なファイルを編集するとワーキングツリーは状態3、つまり状態が進みます( ˘ω˘)

f:id:yukisaibai:20160223185931j:plain

編集後addしステージングに上げることにより、インデックスが最新の状態になります( ˘ω˘)

f:id:yukisaibai:20160223185941j:plain

そして最後にステージングにあるインデックスをaddすることによりHEADの位置が最新の状態になります( ˘ω˘)

上の図を参考にしていただければ、自分がgit resetコマンド実行時にどのオプションをつければいいかイメージがつくと思います((((´ʘ‿ʘ`))))

イメージとしてはsoftはコミットメッセージの変更、mixed(オプション無し)はaddの見直し・追加、hardは変更そのものの取り消しの時に使用するという感じですかね






それでは明日から台湾旅行に行ってまいります