簡體   English   中英

如何在Git中列出沒有標簽的提交

[英]How to list commits with no tags in Git

我希望在特定分支中列出所有沒有與之關聯的標記的提交。

我試過了

git show-ref --tags

但它不起作用。

固定!

Checkout分支然后運行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 (aka grep -v )從git log輸出中減去它們。

添加裝飾信息( %d )以幫助確定用戶的方向確實會增加一些虛假匹配的風險,但通過使用完整的SHA-1對象名稱可以減少這種情況。

git log --pretty="%D%H" --decorate=short --decorate-refs=refs/tags | grep -v "^tag: "

--pretty="%D%H"打印ref和hash。

--decorate=short以短格式打印refs。

--decorate-refs=refs/tags僅打印標簽。

grep -v "^tag: "排除以tag:開頭的行tag: 其余的是任何標記都沒有指出的提交。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM