java - Git 无法识别重命名和修改的包文件

标签 java git

我有一个名为 package/old/myfile.java 的 java 文件。我已经通过 git 提交了这个文件。然后我将我的包重命名为 new,所以我的文件位于 package/new/myfile.java 中。

我现在想将此文件重命名(和内容更改)提交给 git。

当我执行 git status 时,我得到了

# Changes not staged for commit:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       deleted:    package/old/myfile.java
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       package/new/myfile.java

我尝试过添加新的和rm旧的,反之亦然,我不断得到

$ git status
# On branch develop
# Changes to be committed: 
#        delete:    package/old/myfile.java
#        new file:  package/new/myfile.java

我不能执行 mv old new 因为旧文件不存在所以我得到了 bad source 错误。

还有什么我可以尝试的吗?

我已经针对类似问题尝试了一些关于 SO 的多个答案,但它们没有用。

最佳答案

relevant section来自 git book对此进行了解释。

Unlike many other VCS systems, Git doesn’t explicitly track file movement. If you rename a file in Git, no metadata is stored in Git that tells it you renamed the file. However, Git is pretty smart about figuring that out after the fact — we’ll deal with detecting file movement a bit later.

这意味着如果你移动了一个文件然后做了重大的改变,git 将不知道这是一个移动。它会看到一个文件被删除并创建了一个新文件,因为新文件看起来不像旧文件。为了解决这个问题,人们经常使用 git mv 文件,提交移动,然后进行更改。在你的情况下你可以做

git reset # Move changes from index to working copy
git checkout package/old/myfile.java # Undo delete
git mv package/old/myfile.java package/new/myfile.java # Move file

关于java - Git 无法识别重命名和修改的包文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14527257/

相关文章:

java - Jackson 对特定属性使用 getter

Git - 如何在不修改文件的情况下 checkout ?

Git Rebase 不是 rebase 整个分支

git - 从所有分支和标签中完全删除 git 存储库对象并将更改推送到远程

git - 如何获取完整的 Git 日志历史记录

java - 如何从在 TomCat 中运行的 Java 应用程序读取 Apache Httpd Env 变量?

java - 使用 Maven 和类路径 intellij 中的库创建 war 文件

java - 用于 java swing 应用程序的开源 laf[外观]

java - 从 JSP 请求/ session 对象获取服务器 IP 地址

git - 将 secret 排除在 git 存储库之外的最佳做法是什么?