当我查看FileA.cs和FileB.cs的历史时,它们都引用了FileA.cs的历史记录
在某些时候,这些文件只是一个文件:FileA.cs和一些功能被分成两个文件。提交的人可能没有正确提交,现在看来这两个文件的历史是绑定在一起的。 Git似乎认为他们是同一个文件或其他东西。
我可以告诉git以某种方式将它们视为单独的文件吗?
修改:我根本看不到FileB的历史记录。我只能看到FileA的历史记录,它没有显示现在不再存在于FileA中的任何内容(因为它在FileB中)。我想在FileB上使用Blame,但我不能,因为它使用的是FileA的历史记录,不会显示FileB中的行。
Numbers.cs(原始文件/ FileA)
11111111
22222222
33333333
44444444
55555555
66666666
Numbers.cs(分割/ FileA之后)
11111111
33333333
55555555
EvenNumbers.cs(分割/ FileB之后)
22222222
44444444
66666666
在这个例子中,我不再能够访问2,4,6行代码的历史记录,即使它们仍然存在于新文件中。该文件出于某种原因使用Numbers.cs历史记录。
答案 0 :(得分:3)
Git不会那样工作。无论是谁做了提交都没有对Git命令做任何错误。
Git不记录文件的历史记录,而是从整个存储库的历史记录中重建文件的历史记录。如果Git声称两个文件是同一个文件,那是因为在某些时候,这两个文件的内容实际上是相同的。
以下是Git如何工作的更清晰的示例:如果将文件A移动到文件B,Git将在历史记录日志中显示该文件。然而,它实际记录的是文件A被删除而文件B被创建 - 但由于它们具有相同的内容(或足够接近),Git将其描述为“移动” - 当您提出要求时,识别移动发生对于日志,并且它不会被“记录”为实际回购中的移动。
摘要: Git只是猜测文件已被移动或复制,实际上并没有在存储库中以这种方式记录。有时候Git猜错了。您可以更改其猜测的规则。历史仍然存在,你只需要以不同的方式提出要求。
答案 1 :(得分:3)
Git tracks content not files。所以不,你不能拆分历史。