PowerShell で Git の reset/stash などを使う際に履歴を指定する方法

TL; DR

中括弧で表記する文字列は ' で囲みましょう。

はじめに

みなさんおなじみ、履歴を戻すコマンドは、下記の通りです。

git reset HEAD@{0}  

また、スタッシュを適用するコマンドは、下記の通りです。

git stash pop stash@{0}  

しかし、 PowerShell で上記を実行しようとすると、次のエラーが発生し、履歴リセット/スタッシュ適用できません。

error: unknown switch `e'  

解決策

PoserShell では、中括弧に特別な意味があるため(スクリプトブロックと呼ぶらしい)、中括弧内の文字列をコマンドとして実行してしまうからみたいです。

about_Script_Blocks - PowerShell | Microsoft Docs

' で囲み文字列化することで、実行できます。

git reset 'HEAD@{0}'  
git stash pop 'stash@{0}'  

または、中括弧エスケープ処理をすることでも可能です。
PowerShell のエスケープシーケンスは ` ですよね。

git reset HEAD@`{0`}  

git reset HEAD@{1} results in error · Issue #106 · dahlbyk/posh-git

おわりに

エラー文だけでは理解できず、地味に苦労しました。
PowerShell は めんどくさい 奥が深いですね。