
Webサービスやアプリ開発の現場では必須のバージョン管理システム「Git(ギット)」。Gitは、専用のソフトを使えばクリックで直感的に操作することもできますが、いざというときにコマンドが使えると便利です。
前回の 第6話 では、特定の時点までファイルを巻き戻す「リセット」を学びました。
・特定の時点までファイルを巻き戻す
$ git reset
今回の第7話では、間違えてリセットしてしまっても元に戻せる「リフログ」を学びます。一体どのようなコマンドなのでしょうか。このマンガを通して、わかばちゃんと一緒に知識を身につけていきましょう!

【筆者】湊川 あいさん
フリーランスのWebデザイナー・漫画家・イラストレーター。マンガと図解で、技術をわかりやすく伝えることが好き。 著書『わかばちゃんと学ぶ Git使い方入門』『わかばちゃんと学ぶ Googleアナリティクス』『わかばちゃんと学ぶ Webサイト制作の基本』『運用ちゃんと学ぶ システム運用の基本』が発売中のほか、マンガでわかるGit・マンガでわかるDocker・マンガでわかるRuby・マンガでわかるScrapbox・マンガでわかるLINE Clova開発・マンガでわかる衛星データ活用といった分野横断的なコンテンツを展開している。・Amazon著者ページ
・Twitterアカウント
間違えて操作しても、reflog(リフログ)で元どおり!



リフログ(reflog)とは?
リフログとは、HEADの動き(自分自身が行った行動)を履歴にしたものです。具体的には、次のものが履歴として残ります。
・新規コミット(コミット、マージ、プル、リバートなど)
・ブランチの切り替え(チェックアウト)
・履歴の書き換え(リセット、リベースなど)
・ブランチの切り替え(チェックアウト)
・履歴の書き換え(リセット、リベースなど)

HEADについては前回の 第6話 で説明したとおりだな。

簡単に言えば「自分の操作履歴を見ることができる」ってことね。

そのとおり。リフログの手順としては『1. 操作履歴を見る → 2. 戻りたい地点の数字を指定してリセットする』のだ。
1. 操作履歴を見る
では、実践してみましょう。練習用リポジトリの中で、リフログコマンドを実行します。
$ git reflog
操作履歴一覧が表示されます。上に表示されているものほど新しい履歴です。
02f11b7 HEAD@{0}: reset: moving to 02f11b7
0488e28 HEAD@{1}: merge develop: Merge made by the 'recursive' strategy.
6978c20 HEAD@{2}: checkout: moving from develop to master
32275f0 (develop) HEAD@{3}: commit: 制作事例を追加
0e95561 HEAD@{4}: checkout: moving from master to develop
6978c20 HEAD@{5}: commit: 3回目のコミット
0e95561 HEAD@{6}: commit: 2回目のコミット
02f11b7 HEAD@{7}: commit (initial): はじめてのコミット
0488e28 HEAD@{1}: merge develop: Merge made by the 'recursive' strategy.
6978c20 HEAD@{2}: checkout: moving from develop to master
32275f0 (develop) HEAD@{3}: commit: 制作事例を追加
0e95561 HEAD@{4}: checkout: moving from master to develop
6978c20 HEAD@{5}: commit: 3回目のコミット
0e95561 HEAD@{6}: commit: 2回目のコミット
02f11b7 HEAD@{7}: commit (initial): はじめてのコミット

ふんふん。で、私はHEAD@{1}に戻りたいんだよね。
2. 戻りたい地点の数字を指定してリセットする
「resetの操作をする前(1つ前)に戻したい」といった場合、コマンドは次のとおりです。
$ git reset --hard HEAD@{1}
間違えて実行してしまったコマンドの1つ前まで戻れました!

リフログって便利だなー! Gitって、こんなにも融通がきくツールなんだね。

私も、このコマンドを初めて知ったときは感動したものだ。リフログは、マージ前のブランチを間違えて削除してしまったときにも使えるぞ。覚えておいて損はないコマンドだ。
まとめ
これで、間違えて操作してしまっても、あわてず元に戻すことができますね。
・HEAD の移動履歴一覧を表示
$ git reflog
・特定の時点までファイルを巻き戻す(nには戻りたい地点の数字を入力)
$ git reset --hard HEAD@{n}
Gitにはまだまだたくさんのコマンドがあります。
次回は、2019年夏にリリースされた新コマンド「switch」と 「restore」 について学んでいきましょう。
▼登場キャラクター紹介


▼わかばちゃんが登場する書籍
▼ これまでの「マンガでわかるGit」
第1話「リポジトリの作成」
第2話「ブランチの概念」
第3話「マージの仕組み」
第4話「コンフリクトの修正」
第5話「git revert」
第6話「git reset 3種類」
第7話「git reflog」
第8話「git switchとgit restore」
第9話「git diff」
第10話「git cherry-pick」
第11話「git stash」
第12話「git grep」
第13話「git blame」
第14話「git remote」
第15話「.gitconfig でコマンドを短縮」
第16話「.gitconfig と .git/config で複数のGitアカウントを使い分ける」
第17話「prune オプション」
第18話「git tag」
第19話「detached HEAD 状態って何?」
第2話「ブランチの概念」
第3話「マージの仕組み」
第4話「コンフリクトの修正」
第5話「git revert」
第6話「git reset 3種類」
第7話「git reflog」
第8話「git switchとgit restore」
第9話「git diff」
第10話「git cherry-pick」
第11話「git stash」
第12話「git grep」
第13話「git blame」
第14話「git remote」
第15話「.gitconfig でコマンドを短縮」
第16話「.gitconfig と .git/config で複数のGitアカウントを使い分ける」
第17話「prune オプション」
第18話「git tag」
第19話「detached HEAD 状態って何?」