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

git log --before="4 months" show me branches that have commits from 3 weeks ago. what am I doing wrong?

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

 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, " 它作为打算。

谁能给我任何指导?

git log -1 [filters] $k 中的 -1 将:

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

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

您的前导 if [ ... ] 条件将始终为真。


要解决这个问题,您可以将提交范围限制为 select 只有每个分支的前导提交:

git log --before="3month" $k^..$k