我想要一个特定分支下没有任何标签关联的所有提交记录列表。
我尝试过:
git show-ref --tags
但是它没有起作用。
我想要一个特定分支下没有任何标签关联的所有提交记录列表。
我尝试过:
git show-ref --tags
但是它没有起作用。
已修复!
请检出分支,然后运行git log --format="%h %d" |grep -v '(tag:' | awk '{print $1}'
git rev-list master |
while read sha1; do
test -z "`git tag --points-at $sha1`" &&
git --no-pager show -s --format="%h %s" $sha1
done
git rev-list master
列出分支中提交的SHA1 ID。
while read sha1; do
对每个SHA1运行一个循环。
test -z "`git tag --points-at $sha1`" &&
测试是否没有指向提交的标签。
git --no-pager show -s --format="%h %s" $sha1
对于当前分支的快速且简单的解决方案,假设您的shell支持进程替换:
git log --format='%H %d' |
grep --fixed-strings --invert-match \
--file=<(git for-each-ref --format='%(*objectname)' refs/tags)
%(*objectname)
可以得到已打标签的提交哈希值而非标签对象本身的哈希值,这使我们可以使用grep --invert-match
(又称grep -v
)从git log
输出中减去它们。添加装饰信息(%d
)以帮助用户定位会增加一些虚假匹配的风险,但通过使用完整的SHA-1对象名称可以减少这种风险。git log --pretty="%D%H" --decorate=short --decorate-refs=refs/tags | grep -v "^tag: "
--pretty="%D%H"
打印引用和哈希值。
--decorate=short
以短格式打印引用。
--decorate-refs=refs/tags
仅打印标签。
grep -v "^tag: "
排除以 tag:
开头的行。其余是没有指向任何标签的提交。