You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在git log --graph视图中高亮未推送的本地Git标签?

在git log --graph中区分未推送的本地Git标签

Git默认显示标签时不会区分轻量/附注标签或本地未推送/已同步标签,想要在git log --graph视图里高亮未推送的本地标签,可参考以下两种方案:

方案一:通过命名前缀识别未推送标签

  • 给仅本地未推送的标签添加origin-前缀(例如origin-v1.0.0),这样在git log --graph中能直接通过前缀识别出待推送的标签
  • 推送标签时,可基于前缀标签创建正式标签并推送:
    # 基于前缀标签创建附注标签(轻量标签可省略-m参数)
    git tag -m "v1.0.0 版本发布" v1.0.0 origin-v1.0^{}
    # 推送正式标签到远程
    git push origin v1.0.0
    # 可选:删除本地的前缀标签
    git tag -d origin-v1.0.0
    

方案二:通过脚本自动识别并显示未推送标签

如果不想修改标签命名,可通过脚本对比本地与远程标签的差异,在git log --graph顶部列出未推送标签:

  1. 创建脚本文件git-log-unpushed-tags,内容如下:

    #!/bin/bash
    # 获取本地所有标签并排序
    LOCAL_TAGS=$(git tag | sort)
    # 获取远程所有标签(去除refs/tags/前缀)并排序
    REMOTE_TAGS=$(git ls-remote --tags origin | awk '{print $2}' | sed 's/refs\/tags\///' | sort)
    # 找出本地存在但远程没有的标签
    UNPUSHED_TAGS=$(comm -23 <(echo "$LOCAL_TAGS") <(echo "$REMOTE_TAGS"))
    
    # 若有未推送标签,先打印提示
    if [ -n "$UNPUSHED_TAGS" ]; then
        echo "⚠️ 未推送的本地标签:"
        echo "$UNPUSHED_TAGS"
        echo "------------------------"
    fi
    # 执行带图标的git log命令,可根据需求修改--pretty格式
    git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' "$@"
    
  2. 配置脚本权限并添加到可执行路径:

    chmod +x git-log-unpushed-tags
    mv git-log-unpushed-tags ~/.local/bin/
    
  3. 设置Git别名,方便调用:

    git config --global alias.logp '!git-log-unpushed-tags'
    

之后执行git logp,就能在log视图顶部看到未推送标签列表,再显示带分支图的提交记录。

方案对比

  • 方案一:无需额外工具,直观易识别,但需要手动维护标签命名前缀,适合标签数量较少的场景
  • 方案二:自动识别未推送标签,无需修改标签命名,但依赖脚本,适合标签较多的场景

内容的提问来源于stack exchange,提问作者Steven Lu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 04:15:21