見出し画像

うっかりファイル削除をコミットしていたとき(git)

Rust100本ノックをちょっと進めていたのですが、その際にとんでもないことに気づいてしまったのでした。なんと作ってたソースをいつの間にか消していたのでした。

事の起こりはNo.054を練習していたときのこと、ふと気づくと過去のソースがある時点から消えているということに気づいたのでした。45番までが消えており、46番以降のソースのみになっていたのでした。

なんでやー! と思いつつgithubにてソースディレクトリ内のコミット履歴を遡って見てみました。下に見えるは現時点での状態になります。

ところが何かをとちったのか、途中のコミットでソースをごそっと消していたのです。どうも生成されたバイナリの置かれる場所(target)ではなく、どういうわけかソースコードを置いているsrc/binがごそっと消される操作をしていたのでした。

なんたるギャオス。ここではgithubで探していたのですが、もう少しまっとうな方法は無いものかと調べていたところ、gitのオプションにて、--diff-filterというのがあるのでした。

$ git diff --diff-filter=D --summary
commit 4cde4d978d500e4a994bd0d2fe810c50210d30c7
Author: SATO Daisuke <densuke@fuga.jp>
Date:   Sun Sep 6 19:48:24 2020 +0900

   remove binaries

delete mode 100644 src/bin/no000.rs
delete mode 100644 src/bin/no001.rs
(以下略)

これですね、ということでこれを取り戻す方法としては、2つ考えられました。

- checkoutで当該コミットから取り出す
- revertで当該コミットの逆パッチを用意する

どっちが良いかは状況によっても変わると思います。たとえば同じファイル名で新しいのを作っていれば、checkoutで必要なものだけを取り出してコミットし直すとかが適切かもしれません。

でも今回は消しちゃった存在の代わりは無かったので、自分の悪行の記録もかねてrevertすることにしました。

$ git revert 4cde4d978d500e4a994bd0d2fe810c50210d30c7

コミット確認が出るので保存して了承すれば無事復帰です。忘れないうちにpushもしました。無事復活です。なおその直前にあほなことしてる.gitignoreも修正しております。

セーブポイントとして使うことのできるgitはやはり開発に欠かせないツールですね、感謝感謝。


この記事が気に入ったらサポートをしてみませんか?