2020-10-04に更新

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

本記事は、 Qrunch からの移転記事です。

移転元: PowerShell で Git の reset/stash などを使う際に履歴を指定する方法 - 雑木林

TL; DR

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

はじめに

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

gitで履歴を戻すコマンド(実行不可)

git reset HEAD@{0}

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

gitでスタッシュを適用するコマンド(実行不可)

git stash pop stash@{0}

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

PowerShellで履歴を戻そうとした際のエラー

error: unknown switch `e'

解決策

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

about_Script_Blocks - PowerShell | Microsoft Docs

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

gitで履歴を戻すコマンド(文字列化)

git reset 'HEAD@{0}'

gitでスタッシュを適用するコマンド

git stash pop 'stash@{0}'

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

gitで履歴を戻すコマンド(エスケープ処理)

git reset HEAD@`{0`}

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

おわりに

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

ツイッターでシェア
みんなに共有、忘れないようにメモ

Morichan

Qrunch 移転組です。

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント