gpt4 book ai didi

git - 显示所有分支中单个文件的历史记录

转载 作者:太空狗 更新时间:2023-10-29 13:22:10 26 4
gpt4 key购买 nike

如何在 Git 中显示单个文件的完整历史记录?当我使用 git log <filename>gitk <filename> ,我只会 merge 。我想查看影响文件的 merge 分支的提交。我试过了 --follow和其他标志,找不到方法。

最佳答案

TL;DR 摘要:--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]

但是,git rev-list 访问的修订从您指定的点开始(默认= HEAD)。因此,任何已经属于您指定的点或其历史的修订都将被省略:

        C - D           <-- branchA
/
A - B - E - F - G <-- branchB
\
H - I - J - M <-- HEAD=branchC
\ /
K - L

在此图中,我输入了三个分支名称,并显示 HEADbranchC。每个字母代表一个提交(一个 SHA-1)。任何提交的父项都是在其左侧的那些,直接向左或沿着提交之间的父提交链接向上或向下移动。

此时,git log 将显示提交 MLK JIHBA,因为 git log(和 git rev-list)将从 HEAD 开始并向后走。 (这些提交的准确顺序取决于额外的参数。)

另一方面,git log branchB 将显示提交 GFEBA,因为从提交 G 开始并向后走会选择这些提交(而不是其他)。同样,git log branchAD 开始,然后回到 A

如果你要求 git rev-list 查看 --all,它将从 all 引用开始(所有分支,所有标签,所有远程分支,以及 refs/ 命名空间中的所有其他引用)并向后走。在这种情况下,仅所有分支就足以选择每个提交。在带有标签的存储库中,--branches 可能比 --all 得到更少,因为可能有一些行被标记但没有标记分支。查看(相当压倒性的)git rev-list documentation在此处查看所有可用选项。


将文件名添加到 git log 使其跳过它访问的一些(许多或大部分)提交的打印,通过文档中描述的内容"History Simplification" .也就是说,git log 首先选择 您的git rev-list 参数选择的所有提交,但随后它只显示 一个较小的数字。

添加 --follow 使 git log 尝试注意到文件在特定提交中被重命名的情况,并且在这些情况下,将选定的修订切换到具有以前的名字一旦它在它的历史行走中跨越这样的提交就转换了。换句话说,它试图调整历史简化以纠正名称更改。此重命名发现是动态执行的(对每对提交重新测试)。它仅在后退时有效——代码不在那里用于处理其他提交顺序。

使用 git diff 时,您可以更好地控制识别为重命名的内容;使用 git log--follow,你会被编译默认的 50% 匹配卡住。

关于git - 显示所有分支中单个文件的历史记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24876134/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com