git stash list
を使用すると、ID付きの隠し場所のリストが表示されます。 git stash list --date=local
またはgit stash list --date=relative
を使用すると時間がわかりますが、対応するIDが何であるかわかりません。
いつか隠し場所を手に入れたい。
_git stash list
_は、特定のオプションセットを使用して_git log
_を実行するだけです。
_list_stash () {
have_stash || return 0
git log --format="%Gd: %gs" -g --first-parent -m "$@" $ref_stash --
}
_
_$@
_部分は、指定した追加オプションを挿入します(デフォルトではなしですが、この場合は_--date=relative
_)。1
_--date=relative
_を使用すると、_%Gd
_からの出力が変更されます。indexを含む短いreflogの代わりに、/を含む短いreflogを取得します。相対タイムスタンプ:
_$ git stash list
stash@{0}: ...
$ git stash list --date=relative
stash@{4 minutes ago}: ...
_
この場合の解決策は、_--date=relative
_に_%Gd
_の表示方法を変更させるのではなく、独自の明示的な形式を使用することです。例えば:
_$ git stash list --format='%Gd (%cr): %gs'
stash@{0} (4 minutes ago): ...
_
(_%cr
_は、コミットのコミッタータイムスタンプを相対形式で挿入します。これは、_git stash
_が行うすべてのコミットが、特別なstash
refに格納されている、いくつかのコミットを行うことであることがわかったら意味があります。ブランチではなく)。
1この回答を確認すると、_--first-parent
_引数(文字通り_-m
_コードに存在)_git stash
_および_-g
_引数は、最初は冗長に見えることに注意してください。 _-g
_の_git log
_引数は、コミット履歴ではなく、reflogのみを参照するように指示します。この場合、_--first-parent
_は何も意味しません。一方、_-m
_は_git diff
_にマージコミットを分割するように指示しますが、差分ではなくコミットログを調べているので、これはここで何をしているのでしょうか。
答えは、_git log
_canは、_git diff
_を実行するパッチを表示するため、引数として_-p
_を指定すると、_--first-parent -m
_は、この差分を、stashreflogが指すコミットを最初の親と比較するように制限します。 stash bag reflogエントリポイントが作業ツリーコミットであるコミット。 first親は、stash-が存在する元のコミットです。バッグがぶら下がっています。 (その2番目の親はインデックスのコミットであり、3番目の親が存在する場合は、すべてまたは追跡されていないファイルのコミットです。)したがって、これらのオプションは、_git stash list -p
_を現在のコミットに対してスタッシュのワークツリーコミットと比較するためにあります。隠し場所自体が作られたとき。
これは賢いですが、かなりあいまいです! :-)
Stashを参照するときは、実際にはstash@<date>
構文を直接使用できます。
$ git stash list --date=local
stash@{Sun Dec 21 22:32:14 2014}: WIP on develop: 7142a6e Update data files
stash@{Fri Dec 12 10:02:20 2014}: WIP on develop: c72abda Add initial calibration data
stash@{Wed Dec 10 10:02:05 2014}: WIP on master: 1d27422 Bug fix for gadgeteer
$ git show 'stash@{Fri Dec 12 10:02:20 2014}'
commit a096484501caf14942f01a6500a5d0c3476d3145
Merge: c72abda 861fff6
Author: Robert Xiao <[email protected]>
Date: Fri Dec 12 13:02:20 2014 -0500
WIP on develop: c72abda Add initial calibration data
...
$ git stash pop 'stash@{Fri Dec 12 10:02:20 2014}'
隠し場所のIDを取得する必要はまったくありません!これは、相対的な日付が一意である限り、date=relative
でも機能します。