渋谷ほととぎす通信

新しいこと、枯れたこと問わず大庭が興味を持ったものを調査、生活の効率を求める完全趣味の技術ブログ

gitで過去に削除したファイルを復活させる方法


僕はGit管理されたファイルを扱うときは、ほぼ100%の確率でSourceTreeを使用します。 Atlassian製で、Windows / Mac両OSで対応していて安定しています(若干重いですが)。

あわせて読みたい
HomeBrew-Caskを使ったSourceTreeのインストール方法を紹介しています。
2014年製MacbookAirに対してMojaveクリーンインストールと環境再構築の半自動化 - 渋谷ほととぎす通信

gitはコマンドで操作もできますが、大量の差分を一度に見たいときや、コミットする対象を一覧できるGUIに慣れてしまうと、なかなかコマンドを使う気にはなれなくなります。

しかし、万能そうに見えるSourceTreeですが、できない事もたくさんあります。

今回はSourceTreeではできない、知っておくと助かるコマンドを紹介します。

過去に削除してしまったファイルの復活

過去に削除してしまったファイルを復活させてまた使いたいという事案は、開発しているとよく発生します。SourceTreeの削除コミットを元に戻してみます。

git checkout 削除コミットハッシュ^ -- 復活させたいファイルパス

上記のコマンドで元に戻すことができます。

  • 指定するコミットハッシュは、削除コミット以前にする
  • 削除コミットハッシュを指定した時はお尻に ^ を忘れないように
  • 当たり前ですが、復活させるファイルはファイル名だけではなく.gitからのパスで記述(ファイル名だけではダメ)

上記の注意点に気をつけてもらえればと思います。

具体例

以下のようなコミットログがあるとします。

commit d5d618f0d27e8f2de3caa9e66eb2eb2ca17c6787 (HEAD -> master)
Date:   Mon Jul 29 22:56:21 2019 +0900

    update text

commit 1b20a2c90fff42edc29be9703ec5f565290c1ce2
Date:   Mon Jul 29 22:54:25 2019 +0900

    delete test.txt

commit b5e99d730a3abc4b0719d5bb0c010105dbeeec85
Date:   Mon Jul 29 22:50:30 2019 +0900

    initial


SourceTreeだとこのような表示になります。
f:id:esakun:20190729230329p:plain

1b20a2c90fff42edc29be9703ec5f565290c1ce2 のコミットで test.txt が削除されていますので、コチラを復活させてみます。

削除コミットハッシュより以前のコミットを指定する

削除コミットを指定する場合は ^をお尻につけることで、一つ前のコミットを指します。 ^ をつけない場合は、削除コミット以前のコミットを指定します。

git checkout 1b20a2c90fff42edc29be9703ec5f565290c1ce2^ -- test.txt

^ をつけるパターンで記述していますが、上記のコマンドでtest.txtは復活します。

まとめ

大抵のことはGUI(SourceTree)で事足ります。しかし不慮の事故、オペミスなどでファイルを復活させなければならない、または削除してしまった作業内容を元に戻したりなどしなければならない時があり、SourceTreeでは手に追えなくなる時が多々あります。

そんな時に備えコマンドを覚えておく、ググり方を覚えておくと焦らずに対処でき、時間を有効活用できるかもしれません。

参考