プロジェクトの中のノートやチャートなどが壊れてしまった際に、Gitの履歴から復元する方法

このノートでは、プロジェクトの中のノートやチャートのファイルが壊れてしまってExploratory Desktopから見えなくなってしまったときなどに、gitの履歴から復元する方法を説明します。

復旧したいプロジェクトのディレクトリを調べる。

Macではターミナル、WinodwsではGit Bashを起動します。 例えば、HowToという名前のプロジェクトを復元したい場合、まず以下のようにExploraotryレポジトリの下にあるprojectsというディレクトリにcd ~/.exploratory/projectsというコマンドで移動します。そして、次にgrepコマンドでHowToというプロジェクト名をキーワードで検索します。

$ ~ cd  ~/.exploratory/projects
$ grep HowTo ./*/project.json
./HowTo_hvj9bGH8/project.json:    "name": "HowTo",

すると、この例では~/.exploratory/projects/HowTo_hvj9bGH8が復旧したいプロジェクトのディレクトであることが分かりました。

変更履歴を確認する

次にこのプロジェクトのディレクトに移動し、どんな変更がプロジェクトにあったかをgit log --allというコマンドで確認します。

$ cd HowTo_hvj9bGH8 
$ git log --all

実行すると、以下のように変更の履歴が日付順に表示されます。

差分を確認する。

各変更にはcommit IDが振られています。例えばある特定のcommitと、現在状態の差分を見たければ、commit IDの最初の数桁を指定して、git diff <commit ID> と以下のようにコマンドを実行すると差分を確認できます。

$ git diff 41cf4ba

すると、このようにノートの中身の差分が確認できました。確認が終わったらqとタイプするとこの差分確認モードから抜けることができます。

commitのIDを指定して復旧する

差分や日付から戻したいcommit IDが決まったら、以下の要領でプロジェクトを復旧します。(復旧はノートやチャートのレベルではなく、プロジェクト単位なので注意が必要です。)

バックアップを取る

以下のgitのコマンドで念の為にバックアップを取ります。ここではbackup1という名前でバックアップを取得しています。

$ git branch backup1 

復旧する

例えば、41cf4baで始まるcommitに戻したければ、git checkout masterを実行した後に、git reset --hard <commit ID>を実行すると戻せます。

$ git checkout master 
$ git reset —-hard 41cf4ba

以下のように復旧できました。