【问题标题】:Git diff between latest and previous tag最新标签和上一个标签之间的 Git 差异
【发布时间】:2016-01-14 22:13:28
【问题描述】:

我想做一个 diff 就像 this one.

唯一的区别是我不想“手动”通知标签名称,我希望它们被 git 命令检索。

我知道git describe --tags 返回我的最新标签。但是上一个呢?如何获得?

基本上我想要的是:

$ git diff $(git_command_to_get_previous_tag) $(git describe --tags)

还有我不想要的:

$ git diff 1.0 2.0

【问题讨论】:

    标签: git git-diff git-tag


    【解决方案1】:

    您可以使用以下方式获取最新标签:

    git tag --sort version:refname | tail -n 1
    

    和前一个标签使用:

    git tag --sort version:refname | tail -n 2 | head -n 1
    

    把它放在一起,你可以用这个得到一个差异:

    git diff $(git tag --sort version:refname | tail -n 2 | head -n 1) $(git tag --sort version:refname | tail -n 1)
    

    【讨论】:

    • 成功了!谢谢 !该命令比我预期的要长一点,但那里没有问题:)
    • 它怎么能在 Windows 上工作?在 Windows 上无法识别 tail 命令。
    • @VedankKulshrestha 您可以在 PowerShell 中执行几乎相同的操作:git diff tags/$(git tag -l --sort=-version:refname v* | select -first 1) tags/$(git tag -l --sort=-version:refname v* | select -first 2 | select -last 1) --name-only
    【解决方案2】:

    我需要做同样的事情,但使用 PowerShell 而不是 Bash。不过一般的方法是一样的。

    获取所有标签以防有新标签:

    git fetch --all --tags

    获取最新标签使用:

    git tag -l --sort=-version:refname | select -first 1

    获取上一个标签使用:

    git tag -l --sort=-version:refname | select -first 2 | select -last 1

    把它放在一起:

    git diff $(git tag -l --sort=-version:refname | select -first 1) $(git tag -l --sort=-version:refname | select -first 2 | select -last 1)

    我的实际示例用例:

    git fetch --all --tags > $null; git diff tags/$(git tag -l --sort=-version:refname v* | select -first 1) tags/$(git tag -l --sort=-version:refname v* | select -first 2 | select -last 1) --name-only | Select-String -Pattern ".*\.xml" | Write-Host

    如果有新标签,这将获取所有远程标签,将输出重定向到 $null 以便它不显示,获取在以v 开头的最新标签之间更改的文件列表,然后过滤列表的文件只返回那些以.xml 结尾的文件

    【讨论】:

      猜你喜欢
      • 2022-11-30
      • 2017-01-10
      • 1970-01-01
      • 2013-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-28
      相关资源
      最近更新 更多