Utiliser un caret (^) lors de l’utilisation de Git pour Windows dans PowerShell

J’utilise git à la ligne de commande avec PowerShell, et j’essaie d’utiliser quelque chose comme

git difftool HEAD^ 

Powershell semble traiter cela comme si je tapais

 git difftool HEAD 

alors le symbole du caret est parti. Si j’utilise plusieurs copies du caret, j’obtiens une erreur étrange:

 git difftool HEAD^^ fatal: ambiguous argument 'HEAD@set': unknown revision or path not in the working tree. Use '--' to separate paths from revisions 

Il est intéressant de noter que l’utilisation de quatre carets dans une rangée semble s’échapper, alors git difftool HEAD^^^^ fonctionne comme je l’ git difftool HEAD^ pour fonctionner.

J’ai essayé de m’échapper avec des citations simples, des citations doubles, des accents graves, rien ne semble aider.

Est-ce une fonctionnalité de PowerShell, ou ma configuration est-elle fausse quelque part?

J’ai trouvé le problème et c’était avec ma configuration 🙁

J’utilise Git pour Windows, qui fournit git.exe dans un dossier / bin et git.cmd dans un dossier / cmd. git.cmd est un script batch qui git.exe et fait d’autres choses.

Ces deux répertoires étaient dans mon PATH, avec / cmd venant en premier, donc quand j’ai tapé git , git.cmd était en cours d’exécution. Comme il s’agissait d’un script de traitement par lots, le curseur ne pouvait pas être utilisé. Dans le monde des cmd, un caret est échappé en tapant deux ( ^^ ).

Je suppose que cela était en quelque sorte exigé deux fois, donc quatre carets seraient échappés à deux, puis un (je ne comprends pas vraiment ce bit). Je ne comprends pas non plus le message d’erreur lorsque deux ou trois carets sont utilisés.

La leçon est …

Utilisez uniquement git.exe lorsque vous utilisez Git pour Windows avec PowerShell!

Vous pourriez être en mesure d’utiliser ~ au lieu de ^

git difftool HEAD ~

Notez que HEAD ^^ est identique à HEAD ~ 2

Essayez de vous échapper avec un back-tick: `

 PS C:\>"Hello`^" Hello^ 

Je n’utilise pas git, c’est juste une idée, et si vous la mettez entre guillemets?

 git difftool "HEAD^" 

Le ^ est réservé comme caractère d’échappement dans l’environnement shell cmd. Vous pouvez avoir plus de chance en utilisant start-process et en le passant dans la liste des arguments, mais je ne l’ai pas testé.