无法提交文件,不小心用 mv 重命名

unable to commit a file, accidentally renamed with mv

我不小心用 mv 重命名了 git 下的文件。我改名为 文件从小写到大写保持名称相同。

mv abc.java ABC.java

之后我也进行了更改并提交了文件。

我现在如何对该文件进行实际的 git 重命名? Git bash 好像没看懂 ABC.java 和 abc.java 的区别。

我不确定 master(由其他人)更改了什么,但是在移动到分支后,我无法再将更改提交到文件。它说旧文件索引仍然存在。

$git commit -m "renamed to uppercase" ABC.java fatal: 不会添加文件别名 'dir1/ABC.java'('dir1/abc.java'已存在于索引中)

当我执行 git 状态时,它显示重命名的文件但不允许我提交重命名的文件。如果我尝试删除 abc.java(实际上至少在本地不存在),再次(我认为是因为不区分大小写)git 删除新的。

如果我从中克隆一个新的 repo,该 repo 仍然会提取旧名称的文件(abc.java)但是我的所有更改都在其中,直到最近失败的文件都在里面。

你可以这样做:

$ git mv {abc,ABC}.java

如果你想知道你在哪个提交中对 abc.java 进行了更改,你可以使用 :

git log --follow abc.java

在结果中,您可以找到重命名的提交。

为了将文件恢复到原来的名称,您可以使用 git reset--soft 标志,这将取消暂存您的更改,而不会丢弃它们,使您能够进行更正并提交他们又来了。

我建议您阅读以下有关 git 重置的链接,以便在尝试做一些可能有危险的事情之前对其有一个很好的了解。

Git reset tutorial by Atlassian

Git reset Demystified

在不区分大小写的文件系统上将文件夹名称重命名为 folderName

使用普通 mv 命令(不是 git mv)的简单重命名不会被识别为来自 git 的文件更改。如果您尝试使用“git mv”命令,如以下行

git mv foldername folderName

如果您使用的是不区分大小写的文件系统,例如你在 Mac 上并且你没有将它配置为区分大小写,你会遇到这样的错误消息:

严重:重命名“文件夹名称”失败:参数无效

为了让它发挥作用,您可以执行以下操作:-

git mv foldername tempname && git mv tempname folderName

这通过首先将文件夹重命名为完全不同的文件夹名称来拆分重命名过程。将其重命名为不同的文件夹名称后,该文件夹最终可以重命名为新的文件夹名称。在那些“git mv”之后,同样不要忘记添加并提交更改。虽然这可能不是一个漂亮的技术,但它工作得非常好。文件系统仍然无法识别字母大小写的变化,但 git 可以识别,因为将其重命名为新的文件夹名称,这就是我们想要的:)

一个没有任何文件路径参数的简单 git commit -m "message" 就成功了。它更新了索引,我认为或至少最终它能够识别 abc 将被更新为 ABC。谢谢大家。

如果您需要提交文件重命名,只是大写,并且 staging/commiting 有问题,作为选项

  1. 更改大小写并在末尾添加“1”(或其他符号)
  2. 阶段(没有提交)= 结果 "R" - 重命名文件
  3. 去掉末尾的“1”
  4. 阶段(没有提交)= 结果 "R" - 重命名文件(现在只有大写)
  5. 提交。