#!/usr/bin/env bash
set -euo pipefail
IFS=$'\n\t'

# Recover indexed/staged changes that were lost.
#
# Though not commited yet, git actually stores information about staged changes.
# This function locates all dangling/orphaned blobs and puts them in text files.
# These files can then be checked for changes that a user has lost.
# http://blog.ctp.com/2013/11/21/git-recovering-from-mistakes/
for blob in $(git fsck --lost-found | awk '$2 == "blob" { print $3 }'); do
  git cat-file -p $blob > $blob.txt;
done
