削除した Git スタッシュを復元する
ドロップした Git スタッシュは、ガベージコレクションで削除されるまで復元できます。ダングリングコミットを見つけ、変更を復元する方法を解説します。
Git のスタッシュは、内部ではコミットとして実装されています。そのため、スタッシュをドロップしても、参照先のオブジェクトがすぐに削除されるわけではありません。ガベージコレクションが実行されるまではダングリングコミットとしてリポジトリ内に残るため、多くの場合は復元できます。
ダングリングコミットの一覧
リポジトリ内のダングリングコミットは、以下のコマンドで洗い出せます。
git fsck | awk '/dangling commit/ {print $3}' >> commit_list.txt出力は次のようになります。
dangling commit bfebf68feeebf07a86d7e3e4da77962de67c14eedangling commit 86f4aec78bd51c80b0fd2d5d83963a2259dc72b4dangling commit 48fd9f8f97a577bc8a87b133f6e1dd789a692bd0dangling commit 64ff8c33fb878afb8bf5c99c1b8d8fdfaa1b1f3cdangling commit bdff88e13803e6c7737691aa1fb6f1e038321966候補コミットの確認
各候補コミットの詳細は、以下のスクリプトで確認できます。
#!/bin/bash
while read linedo git show $linedone < ./commit_list.txtこれにより、ダングリングコミットの概要が表示されます。
commit bfebf68feeebf07a86d7e3e4da77962de67c14eeMerge: b046240 5ee731aAuthor: Takahiro Iwasa <[email protected]>Date: Fri Feb 12 22:01:47 2016 +0900
On develop: 0212選択したコミットの復元
コミットの概要を確認し、日時とコミットメッセージを手がかりに復元対象のコミットを特定します。
対象を特定できたら、git cherry-pick を使って変更を復元します。
git cherry-pick -n -m1 <YOUR_COMMIT_ID>まとめ
ドロップしたスタッシュを復元するには、ダングリングコミットを一覧表示し、候補を確認して、正しいコミットを cherry-pick します。git fsck | awk '/dangling commit/ {print $3}' を実行すると、確認対象となるコミット ID を絞り込めます。Git はスタッシュをドロップした時点ではオブジェクト自体を削除せず、そのオブジェクトを指す参照だけを削除するためです。
各候補に対して git show を実行し、作成者、日時、メッセージを確認すれば、事前にハッシュ値を知らなくても対象のコミットを特定できます。git cherry-pick -n -m1 を使うと、新しいコミットを作成せずに変更内容を作業ツリーへ再適用できます。
ただし、この方法を使えるのは、ガベージコレクションによって到達不能なオブジェクトが削除されるまでです。git gc の実行後は復元できない場合があります。
Related posts
C4 ダイアグラムでチーム間のコミュニケーションを改善する
C4 モデルの特徴と、UML やインフラ構成図との違いを整理し、相手のロールに合った粒度でソフトウェアアーキテクチャを伝える方法を解説します。
Cognito User Pools と OIDC で Slack サインインを実装する
Cognito user pool を OIDC 経由で Slack と連携させ、"Sign in with Slack" を Amplify で Next.js アプリケーションに組み込みます。
Lambda Web Adapter で FastAPI を AWS Lambda にデプロイする
FastAPI で書いた API バックエンドをコンテナ化し、Lambda Web Adapter と AWS CDK を使って単一の Lambda 関数へデプロイします。
API Gateway WebSocket:モック統合の実装
バックエンドの Lambda を使わず、モック統合のみで API Gateway WebSocket API を構築し、あらかじめ用意したレスポンスを返します。
CloudFront 署名付き URL 経由で S3 にアップロードする
CloudFront の署名付き URL を使い、独自ドメイン経由で S3 にアップロードする方法を紹介します。S3 の署名付き URL を直接使えない場合に有用です。
