Techブログ担当のMichiです。Gitシリーズは8回目を迎えました。「Gitを使いこなそう!」とタイトルを新たにし、実際の開発業務などで役に立ちそうな、ちょっと応用編をお届けしたいと思います。今回のテーマは「リセット編」。resetコマンドをご紹介したいと思います。本記事は、Gitシリーズ連載記事の1つとなっています。最初からご覧になりたい方は下のリンクをご活用ください。GitGitの事を、学んで試せるページとなっています。Gitを利用される方に最適です。pushなどを使ったことがある方gitをもう少しつっこんで学習したいという方Gitが管理する領域Gitのやり直し系コマンドは様々です。これらを使いこなすにあたり、Gitが管理する作業領域を理解することは大変重要となります。Gitの管理領域は次の3つとなります。作業フォルダいわゆるWindows上のフォルダであり、自由な作業場所です。最終コミット以降変更されたファイルやまだGitの管理対象になっていないファイルなどが混在します。ステージングエリアインデックスツリーという言い方が正式ですが、本記事では理解しやすいようにこの名前を使っています。addコマンドで指定されたファイルがこちらに入ります。commitの際に、コミット対象となるファイルが管理されています。リポジトリファイルの最新コミット状態を持っています。resetコマンドについて、ハンズオン(実際に動作しながら学習する)形式で見ていきたいと思います。initコマンドを実行しましょう。C:/work01/.git/ファイルを1つ作成します。file.txtという名前のファイルです。A1AAという文字があるだけのファイルです。できたらコミットします。file.txtを編集します。内容はつぎのようにします。B1BAがBに変更されただけです。保存したらコミットします。deletion(-)この時点で各管理領域は次のようになっています。3つの領域でfile.txtはすべて同じ内容です。statusを実行してみましょう。cleanmasterブランチを指し示していること、コミットすべきものがないことがわかります。logコマンドを使って、コミット履歴を確認してみましょう。A2つのコミットオブジェクトがあり、現在は上のオブジェクトを指していることが分かります。resetコマンドを使っていきたいと思います。次のコマンドを実行してください。resetの基本的な文法は次のとおりです。コミットへの移動方法コミットへの移動方法はオプションです。--hardがあります。--mixedが適用されます。対象コミット対象コミットの表し方は色々あります。HEAD~はHEADが指すコミットの1つ前のコミットを指します。3つのオプションを使いこなす--softオプションでは、コミットへの移動方法について見ていきましょう。--softの場合各管理領域は次のようになります。HEADが移動し1つ前のコミットを指しています。行われた変更はこれだけです。statusコマンドを実行すると、次のように表示されます。file.txtここでコミットをすることでメッセージを変更したりすることができます。再度コミットしておきましょう。deletion(-)--mixedオプション次に--mixedです。HEAD~を実行すると各管理領域は次のようになります。行なわれたことは2つです。addコマンドでステージングエリアに上げてから、コミットしましょう。いったメッセージが出ます。commitをしておきましょう。deletion(-)--hardオプション最後に--hardです。HEAD~を実行すると各管理領域は次のようになります。行なわれた作業は3つです。HEADポインタが1つ前に戻るステージングエリアの内容がHEADが指すコミット内容で置きかわる作業フォルダの内容がHEADが指すコミット内容で置きかわる3つ目の作業は重要です。作業フォルダの変更が消えてしまうからです。今回の例だと「B」という変更はどこを探してもありません。今回は1度コミットしているため復元することができます。作業フォルダにコミットしていないものが含まれていた場合は、戻すことができませんので注意が必要です。リセットをリセット--hardオプションを使用して作業内容「B」が戻せなくなってしまいましたので、コミットした内容から復元しましょう。戻したいコミットオブジェクトを探します。reflogコマンドを実行します。Aresetやcommitをくり返した履歴が確認できます。新しい方が上で古い方が下に見えています。B」とコメントしていたコミットに戻ります。HEAD@{6}実行後はfile.txtが元(「B」と書かれている状態)に戻っていることがわかります。おわりに本日はここまでとさせていただきます。最後までご覧くださりありがとうございました。やり直し系のコマンドはまだまだ奥深く紹介しきれていないところもありますが、少しずつお伝えできればと思っています。ひきつづきご覧ください。合同会社イー・シー・エフでは、子ども向けプログラミングなどの教育講座を実施しています。プログラミング教室の案内や教育教材の情報、また関連するご相談・問い合わせにつきましては下記よりご確認ください。ECFエデュケーションキッズも大人も。その1】Gitのことが少し深くわかる。