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