Git无法提交,因为已删除的文件不存在。

8
似乎我以某种方式让 git 处于一种状态,无法提交,因为已删除的文件不存在:
~/src$ git status -u
# 在分支 master 上
# 您的分支领先 'origin/master' 5 个提交。
#   (使用 "git push" 发布您的本地提交)
#
# 要提交的变更:
#   (使用 "git reset HEAD ..." 取消暂存)
#
#   deleted:    release-vars.sh
#
~/src$ git commit -a
fatal: pathspec 'release-vars.sh' did not match any files
~/src$ ls release-vars.sh
ls: cannot access release-vars.sh: No such file or directory
有什么想法可以解决这种情况吗?

这可能是一个重复的问题? git-rm-fatal-pathspec-did-not-match-any-files - Jessamyn Smith
不是的,那只适用于处理大文件的特殊情况,而不是单个文件的琐碎情况。 - UpAndAdam
这是文件系统大小写敏感的问题吗? - Ivo
1
只需重新创建文件:'touch release-vars.sh',提交,然后通过git彻底删除它。 - yuvi
2个回答

2

-a 明确告诉它将工作目录中每个当前跟踪文件的当前版本提交。 这与其他操作略有不同。

git add --all

这可能是你想要的。然后进行普通提交。

如果你的 .gitignore 规则留下了你不想跟踪的垃圾文件,你可以明确地使用 git rm --cached 删除该文件,以便在随后的 git commit -a 中不会因为意外丢失该文件而出现问题。


它在我的系统上执行删除操作。当您在提交之前执行git add --all时,commit会说什么? - jthill

0

我建议您首先手动使用git add FILENAMEgit rm FILENAME分阶段进行更改,然后再进行提交而不使用-a选项。(即只需执行git commit -m“SOME MESSAGE”

git commit -a表示自动暂存已修改和删除的文件。当您尝试从git中删除仍可能存在于本地的文件时,这将是有问题的。

明确您正在做什么很少会有坏处,并且可以轻松解决问题。

如果这样做不起作用,请尝试执行git reset,然后重新开始。

git help rm提供的另一种选择如下:

If all you really want to do is to remove from the index the files that are no longer present in the working tree (perhaps because your working tree is dirty so that you cannot use git commit -a), use the following command:

       git diff --name-only --diff-filter=D -z | xargs -0 git rm --cached

谢谢你的建议。但是现在我该怎么办? - Steve Emmerson
@SteveEmmerson 你尝试过不带-a选项提交吗?只用裸的git commit - Sascha Wolf
@SteveEmmerson 如果你尝试使用git rm --cached release-vars.sh,然后再执行git commit -m "remove release-vars.sh"会发生什么? - UpAndAdam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接