如何显示彼此间不到60秒发布的Git提交?

时间:2010-03-22 20:10:17

标签: git logging

我想显示过滤的提交历史记录。我只需要那些彼此之间的间隔少于60秒的提交,以便查看谁做得很差,做得那么快。怎么做?

2 个答案:

答案 0 :(得分:1)

你必须自己解析git-log的输出;没有内置的方法来做到这一点。棘手的是适当地处理合并。如果你有一个线性历史,它会非常快 - 直接使用git log --pretty="$H $at"的输出(即打印完整哈希和UNIX时间戳)。但是,一旦你进行了合并,就没有办法总是以每个提交结束,然后是你想要与之比较的提交。

然后,显而易见的方法是单独查找每个提交的父时间。当然,为每次提交额外调用git log而不是智能地记住它们是非常低效的,但代码确实更短。这就是我提出的bash one-liner:

git log --no-merges --pretty="%H %at" |
while read line; do
    time=${line#* }
    commit=${line% *}
    parent_time=$(git log --no-walk --pretty=%at $commit^)
    dt=$((time - parent_time))
    if [ $dt -lt 60 -a $dt -gt -60 ]; then
        # modify this log format to whatever you like
        git log --no-walk --pretty="%H %an %s" $commit
    fi
done

这不是那么慢,所以如果你不想这么做,那可能就够了。您也只需要检查一次到存储库的开头一次;之后,您可以使用--since限制初始git日志。

你会注意到我限制了+ -60秒之间的时间差。如果存在变化,它很可能是负面的;你可能仍然想要注意,如果有人快速做了两次提交然后换了它们,所以我把负值包括在内。

答案 1 :(得分:0)

  

为了看看谁做得不好,做得那么快

在非常短的时间间隔内进行两次单独的提交是非常有效的原因。

假设您已经工作了两个小时,您修复了两个错误,您更改为文件A修复错误#a,并更改为文件B修复错误#b。

git add A
git commit -m"fixed bug #a"
git add B
git commit -m"fixed bug #b"

这些提交之间的差异可能是10秒,但它们没有任何问题。

事实上,大多数人都会认为错误的做法是将这些提交压缩在一起。

这当然是一种简化的方案,有很多方法可以将您的更改拆分为多个提交,例如使用交互式登台命令git add -p