Git认为我已经重命名了一个文件,而不是删除一个文件并创建另一个文件

时间:2014-07-15 08:23:21

标签: git

$ git status

renamed:    test.foo -> database/migrations/.gitignore

实际发生的事情是我已删除test.foo,这是空的,并创建了一个空的.gitignore

我认为它认为文件是相同的,因为它们都是空的。这对历史有点误导 - 我觉得它很准确。

如何解决这个问题并让它将已删除的文件显示为已删除并将新文件显示为已创建?

2 个答案:

答案 0 :(得分:4)

你可以:

git rm --cached .gitignore
git commit -m "delete test.foo"
git add .gitignore

这有助于将这两项行动分开。

  • 在将.gitignore保留为索引
  • 的同时,首先跟踪test.foo
  • 然后跟踪(git add.gitignore

这将避免重命名启发式(请参阅" How does Git track history during a refactoring?")以使其混淆。

答案 1 :(得分:2)

没有理由做任何事情。在内部,在git中重命名是不可能的 - 它们总是被视为删除后跟附加。但是,git有一些启发式方法可以帮助人们理解该文件已重命名。这些启发式基于新文件看起来像旧文件的数量。

就像你的情况一样,这种启发式方法可能“太”有用了。但是,这可能是由更新的git版本解决的,因为对象存储格式不需要改变以区别对待这些启发式。

您可能希望在http://git-scm.com/community上提交错误请求,因此永远不会将空文件视为重命名。