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

Posted

技术标签:

【中文标题】git:重命名文件并更改文件内容【英文标题】:git: rename file and change the content of the file 【发布时间】:2016-05-09 19:53:33 【问题描述】:

我有一个关于在 git 中重命名文件的问题。

我想重命名一个文件。所以我重命名它。据我了解,如果我不更改文件的内容,git 会检测到移动,因为文件的哈希是相同的。

我使用的是 C++,所以重命名后我必须更改文件中的包含路径(我已重命名),所以问题是 git 没有检测到移动,而是认为删除了一个文件另一个补充道。我正在寻找 git 检测到此更改的解决方案。

有人对此有好的策略吗?

提前致谢 零陵香豆

【问题讨论】:

官方文档说:Git 有一个重命名命令 git mv,但这只是为了方便。效果与删除文件并添加另一个具有不同名称和相同内容的文件没有区别 【参考方案1】:

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

【讨论】:

是否可以进行交互式变基(壁球),以便 git 在壁球之后知道它? 我不确定你的意思,但如果你问壁球是否可行,那么可以,只需运行git rebase -i HEAD~2 并在正确的提交中将pick 更改为squash【参考方案2】:

我使用的是 Java,Java-Classes 相同,如果您重命名/移动它,内容会发生变化(package 声明,Class-Name)。

没有做任何特别的事情,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 

你也可以adjust the Similarity Index,这样 git 可能会更早地识别重命名的文件。

【讨论】:

我尝试在我的终端中调用 diff --git,但我得到一个未知选项 -- git 错误 这是Eclipse EGit插件的输出,我不知道后面是哪个git命令。

以上是关于git:重命名文件并更改文件内容的主要内容,如果未能解决你的问题,请参考以下文章

在 Git 中重命名文件后没有预期的日志 [重复]

让 git 忽略重命名 [重复]

如何重命名git根文件夹?

在git下提交文件时如何控制重命名阈值?

Windows上的Git:重命名文件后无法切换分支(仅更改大小写)

git diff 重命名文件