From: Matthieu Moy Date: Thu, 08 Oct 2009 11:40:45 GMT Subject: Re: git log -S not finding all commits? Message-ID: In-Reply-To: <362436ca.6b5d0fc3.4acdc7e1.41b23@o2.pl> Daniel writes: > Andreas Ericsson wrote: > >> Yes, it's the correct behaviour. -S finds only lines where what you search >> for was added or deleted. It counts the number of occurrences of what you >> specify in each resulting tree and only shows the commits where that number >> changed. In your case, searching for "Free data " would have printed both >> commits, since you first introduce that entire string and then remove it. > > Thanks. However, your suggestion doesn't work. It prints only commit 2. Maybe > you meant: > > $ PAGER=cat git log --pickaxe-regex -S'Free data$' --oneline > > but that doesn't solve my problem. I want to find all commits which changed > lines containing "Free data" (the example I posted is simplified). > > Seems I have to use "git log -p" and search its output using pager... Search the ML's archives, this is a FAQ. People have proposed an option to allow log -S to actually search the diff (much slower, but sometimes what you really want), but AFAIK, no one wrote the code. But I think someone posted a small perl script along the lines of git log -p --format="%s\n%x00" | perl -0 -ne 'print if(/whatever-you-search/);' -- Matthieu Moy http://www-verimag.imag.fr/~moy/