我在一个大型团队中工作,因此有很多其他开发人员的功能分支,都起源于“ master”分支。
我经常自己处理多个功能分支,所以我想只列出“我的”分支”:
如何在命令行上执行此操作?
奖金:我经常使用Git Extensions与git repos进行交互。
其默认视图显示整个DAG。
但是,它允许用户通过直接为git log
命令指定参数来过滤此视图,因此我希望该命令行解决方案也可以在GUI世界中移植。
答案 0 :(得分:0)
git log --pretty="%h %p" --author=<Name> --since="1 month ago"
每一行都有一个或多个提交。第一个是作者为您且年龄小于1个月的提交,其余为其父母。可以根据需要将额外的占位符和单词添加到格式字符串中。
答案 1 :(得分:0)
您可以获得git log
来执行此操作,但是您必须将其分为两个部分。
第一部分是提取您关心的所有起点提交,为此,git log
–或其管道姊妹命令git rev-list
–需要通常的--since
和/或--until
用于日期范围限制,--author
用于选择以您为作者的提交。使用git rev-list
时,默认输出只是所选提交的哈希ID列表。
现在您已将选定的提交作为起点哈希ID,只需在每个此类哈希ID上运行git log
。毕竟,git log
的作用是:
查找所有指定哈希ID的命令行参数。如果没有这样的参数,请使用HEAD
。这些是起始提交哈希ID:将它们放入优先级队列。默认优先级是较新的提交(较晚的提交者时间戳记)排在队列的前面,较旧的提交排在后面。
现在队列已准备就绪,运行循环:
--first-parent
的原因将某些或全部不放入队列中。
,此循环一直运行到队列为空或提交显示限制计数(来自-n number
或等效参数)为止。
请注意,如果您从单个提交哈希ID(例如HEAD
产生的ID)开始,则循环仅从队列中的一个提交开始,然后将其删除并显示。如果该提交有一个父对象,则一个父对象进入队列,该父队列现在的长度为1,因此Git将那个父对象带出队列,显示 it ,然后将 its < / em>父级加入队列-长度又为1。一直重复直到队列变大(合并时)或到达根提交为止,这就是为什么简单存储库中的简单git log
有一些分支但没有合并的原因,它仅显示当前的提交分支(HEAD
)。
不过,对于您而言,该循环是您的第二部分:
显示这些信息以及所有其祖先,而不管作者如何。
第一部分-放入优先级队列中的提交哈希ID集合-正是git rev-list --author='...' --since=...
所打印内容的输出。
唯一棘手的部分在于将git rev-list
打印的内容(选定的哈希ID)连接到git log
命令中。如果您使用的是类似Unix的shell,例如bash
,则可以通过命令替换来实现:
git log $log_args $(git rev-list $rev_list_args)
这将运行git rev-list
(带有任何参数),获取其输出,将换行符替换为空格, 1 ,然后运行git log $log_args
,并使用由{{1 }}的输出。
此命令替换技巧有一个小缺陷:某些系统具有最大数量的参数。如果git rev-list
打印的提交哈希ID太多,则会出现错误:参数列表太长。要解决此问题,git rev-list
允许您指定所有开头使用git log
标志将 input 指向git log
:
--stdin
您可能希望在git rev-list $rev_list_args | git log $log_args --stdin
中包含--decorate
,以便$log_args
在显示特定提交时将打印指向特定提交的任何分支或标记名称。 (请注意,git log
控制是否隐含log.decorate
,并且--decorate
长时间以来默认为log.decorate
,因此,除非您明确要求不使用它,否则除非您将auto
的输出通过管道传输或将其重定向到文件。)
1 对于Git来说,关键的部分不是换行到空格的转换,而是被命令替换的命令的输出被分割成单独的自变量的事实。但是,对于其他一些命令,命令替换的细微细节变得很重要。