之后清理: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*