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

时间:2019-04-15 15:39:34

标签: git

我想要一个特定分支中所有未与任何标签关联的提交的列表。

我尝试过

git show-ref --tags

但是没有用。

4 个答案:

答案 0 :(得分:2)

已修复!

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

答案 1 :(得分: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

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

答案 2 :(得分:1)

当前分支的快速解决方案,并假设您的外壳支持process substitution

git log --format='%H %d' |
  grep --fixed-strings --invert-match \
       --file=<(git for-each-ref --format='%(*objectname)' refs/tags)

在英语中,其读为“给我当前分支上可到达的提交的散列,但被标记的散列除外。”以%(*objectname)格式使用给出被标记的提交而不是标记对象的散列本身,这使我们可以使用git log(也称为grep --invert-match)从grep -v输出中减去它们。

添加修饰信息(%d)以帮助定向用户确实增加了一些虚假匹配的风险,但是通过使用完整的SHA-1对象名称可以减少这种情况。

答案 3 :(得分: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:开头的行。其余的是任何标记都未指向的提交。