如何在Git中列出没有标签的提交记录

3

我想要一个特定分支下没有任何标签关联的所有提交记录列表。

我尝试过:

git show-ref --tags

但是它没有起作用。

4个回答

3

已修复!

请检出分支,然后运行git log --format="%h %d" |grep -v '(tag:' | awk '{print $1}'


之前那个看起来有点可行的命令是 "git log l grep commit l grep -v '(tag:' "。 - IndianRaptor
这很接近,但这更好。 - EncryptedWatermelon
当前的程序只是打印出分支中的所有提交。 - IndianRaptor
这不是你想要的吗?它应该只打印没有标签的提交。 - EncryptedWatermelon
现在应该已经修复了。 - EncryptedWatermelon
显示剩余2条评论

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

如果没有标签,则显示缩写的提交哈希和提交消息的第一行。

1

对于当前分支的快速且简单的解决方案,假设您的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对象名称可以减少这种风险。

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: 开头的行。其余是没有指向任何标签的提交。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接