两个文件具有相同的文件历史记录

时间:2011-12-15 14:37:13

标签: git

当我查看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历史记录。

2 个答案:

答案 0 :(得分:3)

Git不会那样工作。无论是谁做了提交都没有对Git命令做任何错误。

Git不记录文件的历史记录,而是从整个存储库的历史记录中重建文件的历史记录。如果Git声称两个文件是同一个文件,那是因为在某些时候,这两个文件的内容实际上是相同的。

以下是Git如何工作的更清晰的示例:如果将文件A移动到文件B,Git将在历史记录日志中显示该文件。然而,它实际记录的是文件A被删除而文件B被创建 - 但由于它们具有相同的内容(或足够接近),Git将其描述为“移动” - 当您提出要求时,识别移动发生对于日志,并且它不会被“记录”为实际回购中的移动。

摘要: Git只是猜测文件已被移动或复制,实际上并没有在存储库中以这种方式记录。有时候Git猜错了。您可以更改其猜测的规则。历史仍然存在,你只需要以不同的方式提出要求。

答案 1 :(得分:3)

Git tracks content not files。所以不,你不能拆分历史。