我收到了一堆来自我使用的同一个 git repo 的文件,但它们是针对较旧的提交开发的。如何找出他们使用了哪个提交?像最少的差异线。
问问题
485 次
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 回答