在 Git 中,文件没有历史记录。相反,提交 是历史。Git 存储库中的历史记录可通过以下方式找到:
- 选择一个分支名称(或其他一些可以让您找到提交的哈希 ID 的标签);
- 观察该提交,通过其哈希 ID 找到;
- 使用包含一个或多个较早提交的哈希 ID 的该提交来退回到较早的提交。
正是这种从提交到更早提交的退步,这就是探索历史的行为。因此,提交是历史。
现在,每个提交都包含文件:实际上,每个提交都有每个文件的完整副本,以只读格式保存,压缩并且——因为大多数提交大多是复制一些先前提交的文件不变——去重复。因此,给定一些历史提交,我们可以让 Git过滤掉部分甚至大部分历史,只向我们显示 Git 认为我们会发现特别有趣的提交。这是如何工作的。他们查看实际历史的一些子集——一些提交——并简单地对你撒谎,使用精心挑选的、可编程控制的谎言,为你提供有用的信息。git log -- path
git log --follow -- filename
您必须记住,这些是--simplify-by-decoration
您可以使用或等选项控制的谎言--full-history
。否则你会被谎言所愚弄。实际的历史是提交,Git 正在过滤掉一些。
进行新的提交会使所有现有的提交保持不变。这是必须的,因为任何提交的任何部分都不能被更改,即使是 Git 本身也是如此。(这就是 Git 如何管理分布式版本控制系统的“分布式”部分。)