我怎么能防止git认为我做了重命名
我有两个文件index.html
和template.html
。 我把index.html
大部分移到了template.html
,现在git认为我在添加这两个文件时做了重命名。 在特定情况下可以预防这种情况吗?
有一个“被接受”的答案,但是并没有提示如何回答这个问题。
从git-log(1)和git-diff(1)的正确答案是:
--no-renames Turn off rename detection, even when the configuration file gives the default to do so.
为什么Git认为你的文件是副本
Git跟踪内容 ,而不是文件名。 因此,如果两个文件的内容大致相同,git会认为您复制或重命名了该文件。 如果你阅读git-log(1),你会学到:
相似度指数是不变的行数的百分比,不相似度的指数是变化的行数的百分比。 这是一个向下舍入的整数,后面跟着一个百分号。 因此,100%的相似性指标值被保留给两个相同的文件,而100%相异性意味着不存在来自旧文件的行使其成为新文件的行。
所以,假设你的相似度指数是100%,git会认为这是一个副本。 你最好的办法是添加一个合理的日志消息或者注释(更多的参见git-notes(1))来解释发生了什么事情,如果你不认为git正在做正确的事情。
调整相似指数
您也可以尝试调整git用于考虑复制或重命名的值。 git-log(1)手册说:
-M[<n>], --find-renames[=<n>] If generating diffs, detect and report renames for each commit. For following files across renames while traversing history, see --follow. If n is specified, it is a threshold on the similarity index (ie amount of addition/deletions compared to the file's size). For example, -M90% means git should consider a delete/add pair to be a rename if more than 90% of the file hasn't changed. -C[<n>], --find-copies[=<n>] Detect copies as well as renames. See also --find-copies-harder. If n is specified, it has the same meaning as for -M<n>.
同样,如果这些文件大部分是相似的,这也不会对你有所帮助,但是你可以使用这些值来调整它们为了被认为是复制或重命名而需要的相似程度。 你的旅费可能会改变。
如果你刚好在提交之前的某个时刻,并且“你感觉不好,git发疯了”,那么撤销添加了模糊的文件git认为你已经重命名,执行一个提交,然后再添加模糊文件并提交:
git reset ambiguous_file_git_thought_you_renamed git commit git add ambiguous_file_git_thought_you_renamed git commit
这对我有效。
仔细检查没有发生重命名:
git diff --name-status -C HEAD^^ HEAD M ambiguous_file_git_thought_you_renamed M original_file
“M”开头意味着修改,“R”的意思是重新命名。 注意no这里重命名。