如何在文件的git日志中查看分支和标记?
我可以得到一个Git回购的提交历史图表:如何在文件的git日志中查看分支和标记?,git,logging,Git,Logging,我可以得到一个Git回购的提交历史图表: git log --all --graph --decorate 这将显示与每个提交关联的分支和标记(如果有) 类似地,我可以查看repo中任何文件的提交历史图: git log --all --graph --decorate foobar.cpp 但这并不显示附加到每个提交的分支和标记 有没有办法在文件的git日志中显示分支和标记 这是一个简单的回购协议,有3个提交,2个分支(master和feature1)readme1.txt在所有3次提交中
git log --all --graph --decorate
这将显示与每个提交关联的分支和标记(如果有)
类似地,我可以查看repo中任何文件的提交历史图:
git log --all --graph --decorate foobar.cpp
但这并不显示附加到每个提交的分支和标记
有没有办法在文件的git日志中显示分支和标记
这是一个简单的回购协议,有3个提交,2个分支(master
和feature1
)readme1.txt
在所有3次提交中都被修改readme2.txt
是在第一次提交时添加的,在提交后未被更改
回购的git日志显示分支机构名称和头:
readme1.txt
的git日志显示分支名称和HEAD
:
但是,readme2.txt
的git日志既不显示分支名称,也不显示标题
:
此readme2.txt
的一次提交应该同时具有分支名称和头。这是因为如果我签出master
或feature1
分支,我将得到readme2.txt
的提交。在现实世界的回购中,您可以想象这是多么有用,可以知道文件的提交属于哪个分支
如何获取git日志以显示此文件的分支名称?您可以尝试使用--source--branchs
,但这里有一个问题
例如,这里的问题是分支或标记没有直接指向定位的提交。这里值得记住的是,Git的分支和标记名充当指针,指向一个本身包含指针的不可变图。也就是说,首先我们有图形本身:
<--o <--o <--o <--o
^ ^
\ \
o <--o <--o
--decoration
选项告诉git log
当它打印图形中一个节点的哈希ID时,如果该节点有一些指向它的“外部箭头”,那么git log
应该打印它们的名称(在括号中,用逗号分隔)
当您使用文件名参数时,您告诉git log
:仅打印那些提交节点,其中提交的父节点和提交本身之间的差异表示文件已修改。(还可以启用Git称之为历史简化的功能,这在后面很重要。)通过抑制具有这些外部箭头的提交节点的打印输出,还可以抑制装饰
Git确实提供了--source
选项来Git log
,但有点有限。--source
所做的是修改graph walk算法,以便对于每个最初访问的提交节点,它记住将哪个命令行分支或标记参数引入该特定节点。这可能是头
,或分支或标记名,可能来自--分支
或--所有
或类似参数。然后,由于merges导致“walk forks”,所以当它在队列中工作时,修订遍历代码将每个图形节点放入一个队列中,并按照您指定的任何拓扑排序选项确定的顺序遍历该队列。Git将相同的源注释复制到每个访问的节点中
假设我们为上图中的每个节点提供大写字母名称:
v1.0
|
v
<--A <--B <--C <--G <--develop
^ ^
\ \
D <--E <--F <--master
v1.0
|
v
如果git log--all--graph--foobar.cpp
的结果中的提交恰好被分支或标记指向,则分支和标记将与提交一起显示。@ElpieKay我添加了显示我希望git log显示的内容的屏幕截图。我在git日志中找不到执行此操作的任何选项。因为没有分支或标记指向提交a176532
,尽管此提交可从HEAD
、feature1
和master
访问。您可以运行git分支foo a176532
和git标记栏a176532
,然后再试一次git日志。
v1.0
|
v
<--A <--B <--C <--G <--develop
^ ^
\ \
D <--E <--F <--master