From: Junio C Hamano Date: Tue, 04 Nov 2008 23:45:25 GMT Subject: Re: git log -S doesn't find some commits Message-ID: <7vod0voy22.fsf@gitster.siamese.dyndns.org> In-Reply-To: Johannes Schindelin writes: > On Tue, 4 Nov 2008, Bernt Hansen wrote: > >> Commits B, C, and D are not included in the git log -S output even >> though with gitk you can see that 'org-publish-validate-link' is in the >> patch. > > It is not sufficient for it to be in the patch, it has to be added or > deleted in whole. So for example if you had a line > > org-publish-validate-link Hello > > and you changed it to > > org-publish-validate-link World > > git log -SWorld will find the commit, but git log > -Sorg-publish-validate-link will not. It seems nobody has looked at the actual commits, but Dscho got it 80% right. There seems to be a misconception on what -S does. It does *NOT* grep for string in the patch text. It counts number of in preimage and postimage and decides that the commit is worth showing iff they differ. If you look at, for example (B): http://repo.or.cz/w/org-mode.git?a=commitdiff;h=837c81ce51 You can see that in org-publish.el, org-publish-validate-link appears once as removed and once as added, so the total number of the appearance of the symbol in preimage and postimage are the same.