如何在Git中显示单个文件的完整历史记录?当我使用git log <filename>
或gitk <filename>
时,我只会进行合并。我想看看影响文件的合并分支的提交。我已尝试过--follow
和其他旗帜,但无法找到方法。
答案 0 :(得分:3)
这将显示文件的所有版本(合并与否):
gitk --all <filename>
答案 1 :(得分:2)
--all
首先,让我解决一个适用于许多git命令的常规项目。
git log
查看您指定的修订版,使用git rev-list
来处理它们。您通常会看到许多提交的原因是git rev-list
&#34;走历史&#34;,除非告知不要:
$ git rev-list --no-walk HEAD
d1574b852963482d4b482992ad6343691082412f
$ git rev-list HEAD
d1574b852963482d4b482992ad6343691082412f
b9491ea160d12ddfd69a9ddc79ebd264cda20679
676699a0e0cdfd97521f3524c763222f1c30a094
[snip]
但是,git rev-list
访问的修订从您指定的点开始(默认值为HEAD
)。因此,任何不已经包含您指定的点或其历史记录的修订都将被省略:
C - D <-- branchA
/
A - B - E - F - G <-- branchB
\
H - I - J - M <-- HEAD=branchC
\ /
K - L
在此图表中,我输入了三个分支名称,并显示HEAD
为branchC
。每个单个字母代表一个提交(SHA-1)。任何提交的父母都是左边的父母,可以直接离开,也可以沿着提交之间的父提交链接向上或向下移动。
此时,git log
会向您显示提交M
,L
,K
,J
,I
,{{1} },H
和B
,因为A
(和git log
)将从git rev-list
开始并向后走。 (这些提交的准确顺序取决于其他参数。)
另一方面,HEAD
会向您显示提交git log branchB
,G
,F
,E
和B
,因为在提交A
并向后走时选择那些提交(而不是其他提交)。同样,G
以git log branchA
开头,然后返回D
。
如果您要求A
查看git rev-list
,则会从所有引用开始(所有分支,所有标记,所有远程分支以及所有其他引用) --all
命名空间)并向后走。在这种情况下,单独的所有分支都足以选择每个提交。在包含标记的存储库中,refs/
可能会使您小于--branches
,因为可能会有一些标记但未标记分支的行。请参阅(相当压倒性的)git rev-list
documentation以查看此处的所有可用选项。
将文件名添加到--all
会使其跳过其访问的某些(许多或大多数)提交的打印,通过文档中描述的{{3} }。也就是说,git log
首先选择您的git log
参数选择的所有提交,但只有显示更小的数字。
添加git rev-list
会使--follow
尝试注意到在特定提交中重命名文件的情况,并且在这些情况下,一旦转换到此类提交,就将所选修订转换为具有先前名称的修订它的历史 - 走路。换句话说,它会尝试调整历史记录简化以更正名称更改。此重命名发现是动态执行的(为每对提交重新测试)。它仅在向后退步时才起作用 - 代码不在那里处理其他提交命令。
使用git log
时,您可以更好地控制被识别为重命名的内容;使用git diff
&#39; git log
,你仍然坚持50%匹配的编译默认值。