Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在文件的git日志中查看分支和标记?_Git_Logging - Fatal编程技术网

如何在文件的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回购的提交历史图表:

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