我在PowerShell的命令行中使用git,我正在尝试使用像
这样的东西git difftool HEAD^
Powershell似乎将此视为我输入
git difftool HEAD
所以插入符号消失了。如果我使用插入符号的多个副本,我会得到一个奇怪的错误:
git difftool HEAD^^
fatal: ambiguous argument 'HEAD@set': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions
有趣的是,连续使用四个插入符号似乎可以逃逸到一个插入符号,因此git difftool HEAD^^^^
可以正常工作,因为git difftool HEAD^
可以正常工作。
我尝试用单引号,双引号,重音符号来逃避插入符号,似乎没有任何帮助。
这是PowerShell的一项功能,还是我的设置错误?
答案 0 :(得分:8)
我发现了问题,这是我的设置:(
我正在使用Git for Windows,它在/ bin文件夹中提供git.exe
,在/ cmd文件夹中提供git.cmd
。 git.cmd
是一个批处理脚本,它包装git.exe
并执行其他一些操作。
这两个目录都在我的PATH中,首先是/ cmd,所以当我输入git
时,git.cmd
正在运行。因为这是一个批处理脚本,所以不能使用插入符号。在cmd世界中,通过键入其中两个(^^
)来转义插入符号。
我想这是某种方式需要两次,所以四个插入符号将被转义为两个,然后一个(我真的不明白这一点)。当使用两个或三个插入符号时,我也不理解错误消息。
在使用Git for Windows和PowerShell时只使用git.exe!
答案 1 :(得分:2)
您可以使用〜而不是^
git difftool HEAD~
请注意,HEAD ^^与HEAD~2相同
答案 2 :(得分:1)
尝试使用反向标记来转义插入符号:`
PS C:\>"Hello`^"
Hello^
答案 3 :(得分:0)
我不使用git,这只是一个想法,如果你把它括在引号中怎么办?
git difftool "HEAD^"
答案 4 :(得分:0)
^保留为cmd shell环境中的转义字符。你可能有更好的运气使用start-process并将其传递给参数列表,但我没有测试过。