之后清理:git commit -m using single quote - error pathspec on windows git-cmd.exe and vim
Cleaning up after: git commit -m using single quote - error pathspec on windows git-cmd.exe and vim
我刚开始在 Windows 中使用 git。我正在使用最新的 PortableGit 版本 2.30.1,我相信我已经正确设置了它们。
我只是想练习 git 的更高级功能,例如分支、合并、标记等。所以我为它创建了一个简单的模拟项目。
我刚刚开始这个项目。该项目目前只有 2 个文件:f1.py 和 .gitignore。
它目前只有 2 次提交。
问题是在我最后一次(第二次)提交中,我错误地使用了单引号作为 git 提交消息,它抱怨路径规范错误:
C:\ex\gitpractice>git commit -m 'Modified A1 -> A2'
error: pathspec 'A1' did not match any file<s> know to git
error: pathspec '-' did not match any file<s> know to git
然后我尝试了:
C:\ex\gitpractice>git commit -m \'Modified A1 \-> A2'
fatal: \A1: '\A1' is outside repository at 'C:/ex/gitpractice'
结果是 'fatal',我知道,我当时太蠢了...然后我使用正确的双引号提交:
C:\ex\gitpractice>git commit -m "Modified A1 -> A2"
成功了。但无论如何,我留下了多个文件,这些文件不是我有意创建的。无论如何,这是发生的事情的屏幕截图:
如您所见,我尝试使用 git rm
删除其他文件,但它甚至不起作用。
我还使用 Vim 8.2 编辑那里的文件(我只是一个初学者 vim 用户)。我今天才知道我不应该在 git-cmd.exe 和 https://github.com/cmderdev/cmder/issues/2052 的 windows 中使用单引号。但是我仍然留下了创建的额外文件。
'fatal' 提交期间发生了什么?那些额外的文件是什么?移除它们是否安全?应该/我怎样才能删除它们?
(我以前通常使用 git 并在 Ubuntu 机器上用 nano 编辑)
看起来您使用的是花哨的单引号 ’
,而不是简单的 '
。不确定是什么原因造成的,但您不应该使用花哨的引号。 Windows 使用双引号创建长字符串参数。
在标准 windows 命令提示符下,我可以输入
> del A<tab>
并且提示将自动完成以正确的格式删除(>
for cmd
and $
for git-bash
):
# For the ' version
> del "A'"
$ rm A\'
# For the ’ version
> del A’
$ rm A’
git rm
无法删除这些文件,因为它们尚未暂存。因此,git 在其索引中找不到该文件。而且删不掉。错误消息有点误导。 pathspec 不匹配 git 知道 .
的任何文件
为什么要创建这些?好吧,>
字符将输出放入一个文件中,文件名在后面。 '
和 ’
字符不会创建转义字符串。只有 "
可以。
基本上你执行了command > file
。 >
将命令的输出重定向到(新的或现有的)文件中。这类似于 Linux shells.
中的 IO 重定向运算符
Git 什么也没做,你的 shell 做了。换句话说:文件未被 Git 跟踪,这就是为什么你不能 git rm
它(“pathspec”是 Git 语言)。只需使用 Windows Explorer 或从 cmd.exe:
删除(未跟踪的)文件
del A2'
或
del A2*
我刚开始在 Windows 中使用 git。我正在使用最新的 PortableGit 版本 2.30.1,我相信我已经正确设置了它们。
我只是想练习 git 的更高级功能,例如分支、合并、标记等。所以我为它创建了一个简单的模拟项目。
我刚刚开始这个项目。该项目目前只有 2 个文件:f1.py 和 .gitignore。 它目前只有 2 次提交。
问题是在我最后一次(第二次)提交中,我错误地使用了单引号作为 git 提交消息,它抱怨路径规范错误:
C:\ex\gitpractice>git commit -m 'Modified A1 -> A2'
error: pathspec 'A1' did not match any file<s> know to git
error: pathspec '-' did not match any file<s> know to git
然后我尝试了:
C:\ex\gitpractice>git commit -m \'Modified A1 \-> A2'
fatal: \A1: '\A1' is outside repository at 'C:/ex/gitpractice'
结果是 'fatal',我知道,我当时太蠢了...然后我使用正确的双引号提交:
C:\ex\gitpractice>git commit -m "Modified A1 -> A2"
成功了。但无论如何,我留下了多个文件,这些文件不是我有意创建的。无论如何,这是发生的事情的屏幕截图:
如您所见,我尝试使用 git rm
删除其他文件,但它甚至不起作用。
我还使用 Vim 8.2 编辑那里的文件(我只是一个初学者 vim 用户)。我今天才知道我不应该在 git-cmd.exe 和 https://github.com/cmderdev/cmder/issues/2052 的 windows 中使用单引号。但是我仍然留下了创建的额外文件。
'fatal' 提交期间发生了什么?那些额外的文件是什么?移除它们是否安全?应该/我怎样才能删除它们? (我以前通常使用 git 并在 Ubuntu 机器上用 nano 编辑)
看起来您使用的是花哨的单引号 ’
,而不是简单的 '
。不确定是什么原因造成的,但您不应该使用花哨的引号。 Windows 使用双引号创建长字符串参数。
在标准 windows 命令提示符下,我可以输入
> del A<tab>
并且提示将自动完成以正确的格式删除(>
for cmd
and $
for git-bash
):
# For the ' version
> del "A'"
$ rm A\'
# For the ’ version
> del A’
$ rm A’
git rm
无法删除这些文件,因为它们尚未暂存。因此,git 在其索引中找不到该文件。而且删不掉。错误消息有点误导。 pathspec 不匹配 git 知道 .
为什么要创建这些?好吧,>
字符将输出放入一个文件中,文件名在后面。 '
和 ’
字符不会创建转义字符串。只有 "
可以。
基本上你执行了command > file
。 >
将命令的输出重定向到(新的或现有的)文件中。这类似于 Linux shells.
Git 什么也没做,你的 shell 做了。换句话说:文件未被 Git 跟踪,这就是为什么你不能 git rm
它(“pathspec”是 Git 语言)。只需使用 Windows Explorer 或从 cmd.exe:
del A2'
或
del A2*