[英]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.