如何在Git中显示单个文件的完整历史记录?当我使用git log <filename>或时gitk <filename>,我只会合并。我想查看影响文件的合并分支中的提交。我已经尝试过--follow其他标志,但找不到方法。
--all首先,让我处理一个适用于许多 git 命令的一般项目。
git log查看您指定的修订版本,git rev-list用于处理它们。您通常会看到许多提交的原因是git rev-list“走过历史”,除非被告知不要:
$ git rev-list --no-walk HEAD
d1574b852963482d4b482992ad6343691082412f
$ git rev-list HEAD
d1574b852963482d4b482992ad6343691082412f
b9491ea160d12ddfd69a9ddc79ebd264cda20679
676699a0e0cdfd97521f3524c763222f1c30a094
[snip]
Run Code Online (Sandbox Code Playgroud)
但是,访问的修订从您指定的点git rev-list 开始(默认为 = HEAD)。因此,任何不属于您指定的点或其历史记录的修订都将被省略:
C - D <-- branchA
/
A - B - E - F - G <-- branchB
\
H - I - J - M <-- HEAD=branchC
\ /
K - L
Run Code Online (Sandbox Code Playgroud)
在此图中,我输入了三个分支名称,并显示HEAD为branchC. 每个单个字母代表一次提交(SHA-1)。任何提交的父项都在它的左侧,或者直接向左,或者沿着提交之间的父提交链接向上或向下移动。
此时,git log将向您显示提交M, L, K, J, I, H, B, and A, 因为git log(and git rev-list) 将从 at 开始HEAD并向后走。(这些提交的确切顺序取决于其他参数。)
另一方面,git log branchB将向您显示提交G, F, E, B, 和A,因为从提交开始G并向后走会选择这些提交(而不是其他提交)。同样,git log branchA从 开始D并返回到A。
如果您要求git rev-list查看--all,它将从所有引用(所有分支、所有标记、所有远程分支和refs/命名空间中的所有其他引用)开始,然后向后走。在这种情况下,仅所有分支就足以选择每个提交。在带有标签的存储库中,--branches可能会少于--all,因为可能有一些行被标记但没有用分支标记。请参阅(相当多的)git rev-list文档以在此处查看所有可用选项。
添加文件名以git log使其跳过其访问的某些(许多或大部分)提交的打印,通过文档中描述为"History Simplification" 的内容。也就是说,git log首先选择您的git rev-list参数选择的所有提交,但它只显示较小的数字。
添加--follow品牌git log试图通知的情况下将文件跨特定改名承诺,在这些情况下,一旦跨越了历史,步行等提交转换开关选择修订那些以前的名称。换句话说,它尝试调整历史简化以更正名称更改。此重命名发现是动态执行的(为每对提交重新测试)。它仅在后退时起作用——代码只是不用于处理其他提交顺序。
使用 时git diff,您可以更好地控制被识别为重命名的内容;使用git log's --follow,您会遇到 50% 匹配的编译默认值。
| 归档时间: |
|
| 查看次数: |
3184 次 |
| 最近记录: |