git log --before ="4 months"显示 3 周前提交的分支。我究竟做错了什么?

标签 git shell command-line branch git-log

所以我有这个片段,我想用它来过滤掉没有特定前缀并且在 3 个月内没有收到任何提交的分支,以便我以后可以从我们的 Remote 中删除它们。

 for k in $(git branch -r | awk -Forigin !'/\/Prefix1\/|\/prefix2\//'); do
  if [ "$(git log -1 --before="3 month" $k)" ]; then
    echo "$(git log -1 --pretty=format:"%ci, %cr, " $k) $k";
  fi;
done

目前的问题是,当我运行它时,我看到在 3 周前、5 个月前、2 个月前、1 个月前等收到提交的分支,我不知道为什么。

但是如果我只运行: git log --before="4 month"--pretty=format:"%ci, %cr, "它按预期工作。

任何人都可以给我任何指导吗?

最佳答案

-1git log -1 [filters] $k将要 :

  • 展开历史git log [filters] $k
  • 将此历史记录限制在第一行

  • 因此,如果一个分支在其历史记录中有 3 个月的提交(我猜:你的任何一个分支都有),git log -1 --before="3 month" $k将始终显示 1 行——历史上第一个超过 3 个月的提交。

    您的领导 if [ ... ]条件永远为真。

    要解决此问题,您可以限制提交范围以仅选择每个分支的前导提交:
    git log --before="3month" $k^..$k
    

    关于git log --before ="4 months"显示 3 周前提交的分支。我究竟做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61585601/

    相关文章:

    git - git 的新手,为什么我在开发分支上看到我的更改,即使我在功能分支上暂存它们?

    macos - 使用 git svn dcommit 时 git-svn : On Mac, "error: git-svn died of signal 6"

    linux - 在for循环bash中循环两个值

    linux - 如何在SunOs的df -k命令中省略标题

    .net - 用于 .NET 开发的命令行(或等效)工具

    shell - *nix 命令行程序中长选项的单破折号与双破折号 - 最佳实践?

    git - 无法解析主机 : bitbucket. 组织;节点名称或服务名称已提供,或未知

    git - 相当于 'git diff REVISION' 的管道

    bash - 如何防止在 make/shell 中评估字符串?

    python - 如何使用 bash 脚本退出 Django 开发服务器?