查找具有最小差异的提交

时间:2012-12-05 19:19:32

标签: git

我收到了一堆源自我工作的同一个git repo的文件,但它们是针对较旧的提交而开发的。如何找出他们使用的提交?最像差异线的东西。

1 个答案:

答案 0 :(得分:4)

  

如何找出他们使用的提交?最像差异线的东西。

好吧,你可以做到这一点:找到目标目录中具有最小差异的提交。只需在存储库中的所有提交上运行一个循环,并为每个提交计算目标目录的差异,并记住diff最小的那个。

假设您在./repo中拥有自己的存储库,并在./target中拥有相关文件。

#!/bin/sh

cd repo
HEAD=$(git rev-parse HEAD)
git log --pretty='%H' | while read rev; do
    git checkout -q $rev
    lines=$(diff -ruN -x .git . ../target | wc -l)

    if ! [[ "$minlines" ]] || [[ $lines -lt $minlines ]]; then
        minlines=$lines
        commit=$rev
        echo "$lines $rev"
    fi

    [[ $lines -eq 0 ]] && break
done | tail -1

git checkout $HEAD

对于历史悠久的存储库,这需要一段时间,但它确实有效。它将打印出diff的大小,然后是具有最小diff的提交的提交ID。

如果您在脚本运行时中断该脚本,则需要检查一个合适的分支头(例如git checkout master)。