Git错误地推断“重命名”

Jon*_*ave 5 git

Git有推断出“重命名”时,我也没心思为它这样做(这个问题实际上是在相反的,比如说,如何使git的标记的删除,新的文件作为文件移动?):

  1. 我创建了一个新文件,并做了git add. (我没有做 a git commit,因为在这个阶段我不想这样做。)
  2. 后来我做git rm了另一个文件。
  3. 现在git status报道renamed: old-file -> new-file。我还没有committed。

这两个文件在同一个目录下,名称相似,内容有一定的共同点。不过,我故意没有git mv,因为这是改名,我想这两个文件分别跟踪。如果我想要重命名,我会做一个git mv而不是我故意的git add/ git rm

活动git如何决定它是重命名,是否可以告诉它不要尝试推断我不想要的东西?

161*_*903 2

这些文件非常相似,因此可以git status认为这是重命名。在幕后,它根本没有区别,但如果你想确保它不会发生,请在添加和删除文件的地方进行单独的提交:

git add newfile
git commit
git rm oldfile
git commit
Run Code Online (Sandbox Code Playgroud)

  • 正如 Oliver Charlesworth 所说,Git 会动态执行重命名检测,任何时候它比较两个提交*并且*您已启用重命名检测(`--find-renames[=<number>]`)。Git 中的默认设置过去是禁用重命名检测,但“git merge”和“git status”除外。从 Git 2.12 开始,现在默认启用重命名检测。可选数字是“相似度指数”,介于 0 和 100 之间。100 表示文件必须 100% 相同。请注意,您可以为“git diff”和“git merge”设置此值,但“git status”将其硬编码为 50%。 (2认同)