🫶

やってしまった。闇に消えたコードの変更を救うLocal History

2024/03/08に公開

導入

2024年2月某日、久しぶりにやってしまいました。

数時間のコードとの格闘の末に苦渋の思いで生み出したコードを消してしまいました...

私「Undoすればいいじゃん?」

私「別のブランチにcheckoutしてしまいました。」
私「Undoの履歴はもうありません。」

私「え、commitしてあるんでしょ?」

私「してません。」

私「絶望...」

私「絶望...」

はい、どうもソーシャルデータバンク株式会社のKAZIKIと申します。
コードを闇に葬ってしまった私は導入のような脳内会話を繰り広げ絶望したわけなのですが、
今回はそのようにcommitもしていない消えたコードの差分を救い出すPHPStormの機能について書いていこう思います。

TL;DR

今回のような闇に消えてしまった変更差分を復活させる方法としてLocal Historyという機能があります。
私がメインで使っているJetBrains製のエディターでは標準機能として搭載されているようです。
それ以外のエディターでも機能として搭載されているものは多いようです。
もしかしたら皆さんがお使いのエディターでも機能として搭載されているかもしれません。(vscodeなどでも同じような機能があります。)

機能紹介(PHPStormの例)

今回はPHPStormを例にとって、機能への導線・使い方について紹介していきます。
まず好きなファイルを開いている状態で、コードに対して編集しましょう。
(改行でもなんでも良いです。)
次にPHPStormで開いてるファイルの好きな場所で右クリックしましょう。

上図を参考に Local History > Show History の順番で押すと、

このようなポップアップが出てきます。
このポップアップは開いているファイルのコードの変更履歴を閲覧できます。
画面右側のコードが現在のコード、左側が変更履歴のコードです。
左上のRevertボタンを押すと変更履歴のコードまでファイルのコードを戻せます。
>>のボタンを押すことで変更履歴のコードを現在のコードとして部分的に適用できます。

LocalHistoryは銀の弾丸ではない

Local Historyはどうしてもコードを復元できなくなってしまった場合に使える最終手段となります。
しかし、Local Historyを使ってもコードの復元ができないこともありえます。
例えば、

  1. ファイルの履歴はブランチ毎で分かれているわけではありません。
    ブランチを切り替えてから変更を重ねて、ブランチ切り替え前のコードの状態に復元したいと思っても履歴を遡るのは非常に労力が必要な作業です。
  2. ファイルの履歴の保持期限があります。
  3. 復元すべき履歴が保持されているとしても、どのファイルが変更されているかを全て覚えていてリストアップできない状態でないと完全な復元はできません。コードの変更が失われるのは突然です。その時に全ての変更ファイル名を覚えているとは限りません。

まとめ

Local Historyは困った時の最終手段です。
重複しますが、コードの変更が失われる事態は突然訪れます。
大事なのは変更したコードをこまめにcommitするということです。

ソーシャルデータバンク テックブログ

Discussion