Charles のヒントのおかげで、私は自分のやりたいことを正確に実行できるように bash スクリプトを作成しました (これを単なるエイリアスとして実装する際に問題が発生していました)。git stash save と同様に、オプションの stash メッセージを受け取ります。何も指定されていない場合は、git stash によって生成されたデフォルトのメッセージが使用されます。
#!/bin/sh
#
# git-stash-snap
# Save snapshot of working tree into the stash without modifying working tree.
# First argument (optional) is the stash message.
if [ -n "$1" ]; then
git update-ref -m "$1" refs/stash "$(git stash create \"$1\")"
else
HASH=`git stash create`
MESSAGE=`git log --no-walk --pretty="tformat:%-s" "$HASH"`
git update-ref -m "$MESSAGE" refs/stash "$HASH"
fi
編集:以下のコメントで指摘されているように、このスクリプトをgit-stash-snap
パスのどこかに保存するだけで、入力して呼び出すことができますgit stash-snap
。
ここでの素晴らしい点は、この方法で作成された stash をドロップしても、ぶら下がっているコミットの git log [commit-hash] を使用して stash メッセージを表示できることです!
編集: git 2.6.0 以降に追加--create-reflog
するupdate-ref
と、以前に使用されていなかったgit stash list
場合でもこれが表示されます。git stash
編集: Git は と呼ばれる新しい stash サブコマンドを導入したstash push
ため、このスクリプトの命名に関する推奨事項を から に更新しgit-stash-push
ましたgit-stash-snap
。