git:重命名文件并更改文件内容

9
我有一个关于在Git中重命名文件的问题。
我想要重命名一个文件。所以我改名了它。据我所知,如果我不改变文件的内容,Git会检测到移动操作,因为文件的哈希值是相同的。
我正在使用C ++,所以在重命名后,我必须更改该文件(已重命名)中的包含路径,因此问题在于Git无法检测到移动操作,而是认为一个文件被删除并添加了另一个文件。我正在寻找一种方法,使Git能够检测到这种更改。
有谁有好的解决方案吗?
提前致谢 Tonka

1
官方文档表示:Git有一个重命名命令git mv,但那只是一种便利。其效果与删除文件并添加另一个具有不同名称和相同内容的文件无法区分。 - Michael Aigner
2个回答

3

如果你想要两个不同的提交,一个是移动文件,另一个是文件更改,你应该使用git mv并提交。然后更改你的包含路径,并在内部文件更改后再次提交。


1
是否可以进行交互式变基(压缩),以便Git在压缩后知道它? - Michael Aigner
我不确定你的意思,但如果你在问是否可以压缩提交历史,那么是的,只需运行 git rebase -i HEAD~2 并在正确的提交中将 pick 更改为 squash 即可。 - mickiewicz

1
我正在使用Java编程语言,对于Java类而言,如果你重命名或移动了文件(包括package声明和类名),其内容也会相应地改变。
在不进行任何特殊操作的情况下,Git可以识别出文件的重命名,并且我可以查看完整的文件历史记录。
在提交时,我可以通过Eclipse中的eGit History查看移动文件的记录。
diff --git a/Project/src/de/package/app/DebugInfo.java b/Project/src/de/package/app/development/DebugInfo.java
similarity index 88%
rename from Project/src/de/package/app/DebugInfo.java
rename to Project/src/de/package/app/development/DebugInfo.java
index 46494da..f90778e 100644 

你还可以调整相似度指数,这样git就能更早地识别重命名的文件。

我尝试在终端中调用diff --git命令,但是出现了未知选项--git的错误。 - Michael Aigner
这是 Eclipse EGit 插件的输出,我不知道背后使用了哪个 git 命令。 - hinneLinks

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