一个`git log`如何只标记提交?
我想一个`git log`如何只标记提交?,git,Git,我想git logmaster分支上所有标记的提交(以及所有未标记的提交)。这可能吗?可能有很多方法可以做到这一点,但我认为有一种方法可以满足您的需求: git tag | xargs -iCID git --no-pager log -1 CID 另一种选择,但思路相同: git tag | xargs git show --quiet 实现这一点的秘诀是认识到git log使用与git rev list相同的规则。后一个命令具有查看标记的--tags标志。因此,与到目前为止的其他答案
git log
master分支上所有标记的提交(以及所有未标记的提交)。这可能吗?可能有很多方法可以做到这一点,但我认为有一种方法可以满足您的需求:
git tag |
xargs -iCID git --no-pager log -1 CID
另一种选择,但思路相同:
git tag | xargs git show --quiet
实现这一点的秘诀是认识到
git log
使用与git rev list
相同的规则。后一个命令具有查看标记的--tags
标志。因此,与到目前为止的其他答案一样,如果您愿意查看所有标记的提交,这个命令就可以:
git log --no-walk --tags
(--no walk
阻止从标记开始查找所有的父提交,以及父提交的父提交,等等。)
但是您要求“在主分支上进行标记的提交”,我假定这意味着(在技术术语中)“由标记指向并且可以通过主分支
访问的提交”。这要困难得多(git rev list
可以通过--stdin--no walk
进行集合并集,但似乎无法进行集合交叉)。以下是几种查找正确提交ID的方法,但有各种缺点:
comm -12 /tmp/all-tags /tmp/all-master
缺点:需要两个临时文件(除非您使用使用使用/dev/fd
的特殊bash
语法);没有分类可能无法工作;需要通信
uniq-d
生成列表。这确实需要排序,但可以使用管道消除临时文件:
(git rev-list --tags --no-walk; git rev-list master) | sort | uniq -d
缺点:需要排序。提交以某种奇怪的顺序出现,而不是您通常在git log
中看到的顺序comm
方法的功能,但调用了git rev list
本身(可能是一个使用mktemp
创建临时文件以生成唯一名称的脚本)
缺点:需要更多的工作。:-)git log --no-walk $(comm -12 /tmp/all-tags /tmp/all-master)
自2014年以来,Git发生了很多事情;现代用户可能会发现此命令在这方面很有用:
git log --simplify-by-decoration --tags --pretty='tformat:%C(auto)%h %as%d %s'
如果您想包括其他装饰(如分支),只需删除--标记即可:
git log --simplify-by-decoration --pretty='tformat:%C(auto)%h %as%d %s'
或者,您可能会发现这很有用:
git tag -l --format='%(tag) %(taggerdate:short) %(objectname:short) %(subject)'
回答得好!我确实尝试了--标记
,但没有与--禁止行走
结合使用。这个简单的命令实际上让我获得了95%的成功(尽管我很欣赏你的答案的彻底性)。将它与--oneline
选项一起使用是我一直在寻找的。Thks
git tag -l --format='%(tag) %(taggerdate:short) %(objectname:short) %(subject)'