我想要一个特定分支中所有未与任何标签关联的提交的列表。
我尝试过
git show-ref --tags
但是没有用。
答案 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:
开头的行。其余的是任何标记都未指向的提交。