İşte bir git takma adını tanımlayan bir çözüm, bu yüzden bunu şu şekilde kullanabilirsiniz:
git rblame -M -n -L '/REGEX/,+1' FILE
Çıktı örneği:
00000000 18 (Not Committed Yet 2013-08-19 13:04:52 +0000 728) fooREGEXbar
15227b97 18 (User1 2013-07-11 18:51:26 +0000 728) fooREGEX
1748695d 23 (User2 2013-03-19 21:09:09 +0000 741) REGEXbar
Diğer adı .gitconfig dosyanızda tanımlayabilir veya aşağıdaki komutu çalıştırabilirsiniz.
git config alias.rblame !sh -c 'while line=$(git blame "$@" $commit 2>/dev/null); do commit=${line:0:8}^; [ 00000000^ == $commit ] && commit=$(git rev-parse HEAD); echo $line; done' dumb_param
Bu çirkin bir astardır, bu yüzden burada gizlenmiş bir eşdeğer bash işlevi:
git-rblame () {
local commit line
while line=$(git blame "$@" $commit 2>/dev/null); do
commit="${line:0:8}^"
if [ "00000000^" == "$commit" ]; then
commit=$(git rev-parse HEAD)
fi
echo $line
done
}
Kazma çözümü ( git log --pickaxe-regex -S'REGEX ' ) normal ifadeyi içeren satırın diğer değişikliklerini değil, yalnızca satır eklemelerini / silmelerini verecektir.
Bu çözümün bir sınırlaması git suçlama sadece 1. REGEX eşleşmesini döndürür, bu nedenle birden çok eşleşme varsa özyineleme başka bir satırı takip etmek için "atlayabilir". Bu "sıçramaları" tespit etmek için tam geçmiş çıktısını kontrol ettiğinizden emin olun ve ardından REGEX'inizi parazit çizgilerini yok saymak için sabitleyin.
Son olarak, tam fark elde etmek için her taahhütte git show'u çalıştıran alternatif bir sürüm :
git config alias.rblameshow !sh -c 'while line=$(git blame "$@" $commit 2>/dev/null); do commit=${line:0:8}^; [ 00000000^ == $commit ] && commit=$(git rev-parse HEAD); git show $commit; done' dumb_param