9

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

4

1 回答 1

5

如何找出他们使用了哪个提交?像最少的差异线。

好吧,您完全可以这样做:找到与您的目标目录差异最小的提交。只需对存储库中的所有提交运行一个循环,并为每个提交计算一个与目标目录的差异,并记住差异最小的那个。

假设您有您的存储库,./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)。

于 2012-12-05T21:50:19.550 回答