【问题标题】:unable to commit a file, accidentally renamed with mv无法提交文件,不小心用 mv 重命名
【发布时间】:2016-06-17 20:06:24
【问题描述】:

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

mv abc.java ABC.java

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

我现在如何对该文件进行实际的 git 重命名? Git bash 似乎不明白 ABC.java 和 abc.java 的区别。

我不确定master(其他人)上发生了什么变化,但是在移动到一个分支之后,我无法再将我的更改提交到文件中。它说旧的文件索引仍然存在。

$ git commit -m "重命名为大写" ABC.java 致命:不会添加文件别名 'dir1/ABC.java'('dir1/abc.java' 已存在于索引中)

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

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

【问题讨论】:

  • 你用的是什么版本的git? Woudl git rm --cached abc.java 帮助? (后跟 git -A . 和 git commit)
  • $ git rm --cached abc.java fatal: pathspec 'abc.java' 不匹配任何文件我不确定 git 是否认为 abc.java 在 git 中。它说它不在 git 下,但也说它在索引中。

标签: git github git-branch git-reset git-mv


【解决方案1】:

如果您需要提交文件重命名,只需大写,并且您在暂存/提交时遇到问题,作为选项

  1. 更改大小写并在末尾(或其他符号)添加“1”
  2. 阶段(无提交)= 结果“R” - 重命名该文件
  3. 从末尾删除“1”
  4. Stage(无提交)= 结果“R” - 重命名该文件(现在仅大写)
  5. 提交。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      git mv foldername folderName
      

      如果您使用的是不区分大小写的文件系统,例如如果您使用的是 Mac,并且未将其配置为区分大小写,您将遇到如下错误消息:

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

      以下是您可以执行的操作:-

      git mv foldername tempname && git mv tempname folderName
      

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

      【讨论】:

        【解决方案4】:

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

        git log --follow abc.java
        

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

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

        我建议您阅读以下有关 git reset 的链接,以便很好地掌握它,然后再尝试做一些可能很危险的事情。

        Git reset tutorial by Atlassian

        Git reset Demystified

        【讨论】:

          【解决方案5】:

          你可以这样做:

          $ git mv {abc,ABC}.java
          

          【讨论】:

          • 能否请您解释一下上述表达式的含义。我有点害怕在不理解的情况下使用 mv 。我会尽快更新版本
          • @AshwiniR "嗨 git,请将文件 abc.java 重命名为 ABC.java"
          • 如果它与 git mv abc ABC 相同,那么我不能这样做。它说 abc 不受源代码控制
          猜你喜欢
          • 2012-04-23
          • 2011-08-06
          • 2013-08-27
          • 2013-08-25
          • 1970-01-01
          • 2021-02-25
          • 2010-11-19
          • 2019-08-12
          • 2013-08-31
          相关资源
          最近更新 更多