git status 显示重命名但不正确

Posted

技术标签:

【中文标题】git status 显示重命名但不正确【英文标题】:git status shows rename but it's incorrect 【发布时间】:2014-12-04 01:52:37 【问题描述】:

我使用 Rails 进行开发。我有一个名为cpc_admin_controller.rb 的控制器,完整路径是app/controllers/cpc_admin_controller.rb,还有一个名为admin_helper.rb 的助手,完整路径是app/helpers/admin_helper.rb。然后我从admin_helper.rb中删除一个方法到cpc_admin_controller.rb,保存,使用git提交。

但 git 显示消息如下

# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   renamed:    app/helpers/admin_helper.rb ->    app/controllers/cpc_admin_controller.rb
#   modified:   app/helpers/admin_helper.rb

我认为它应该显示两个这样的修改,而不是重命名的

# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   app/controllers/cpc_admin_controller.rb
#   modified:   app/helpers/admin_helper.rb

谁能帮帮我,告诉我为什么?

【问题讨论】:

最后,我提交,app/controllers/cpc_admin_controller.rbapp/helpers/admin_helper.rb 还在,文件名没有重命名。 【参考方案1】:

如this thread所示

Git 不关心单个文件或重命名,它会跟踪整棵树。 它显示的重命名只是基于两个文件的内容的最佳猜测。

Git 状态是 perform rename detection using a heuristic. 但是一旦你提交,你会看到这两个文件是分开的。

【讨论】:

非常感谢。当我阅读perform rename detection using a heuristic 时,我再次出现了我的问题。

以上是关于git status 显示重命名但不正确的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 git 真正显示重命名文件的日志

Git日志(--follow)无法显示重命名之外的历史记录

git gui app 显示检测到的重命名

在 git 文件重命名后使 Xcode 5 跟随历史

处理重命名:svn vs. git vs. mercurial

git分支重命名