git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: How to verify that lines were only moved, not edited?

From
Jeff King <peff@peff.net>
Date
Oct 19, 2011, 16:33 UTC
Message-ID
<20111019163354.GB3157@sigill.intra.peff.net>
In-Reply-To
<4E9EDFEC.3040009@viscovery.net>
On Wed, Oct 19, 2011 at 04:34:20PM +0200, Johannes Sixt wrote:
Show 25 quoted lines
> I thought there was a way to use git-blame to find out whether a change
> only shuffled lines, but otherwise did not modify them. I tried "git blame
> -M -- the/file", but it does not work as expected, neither with a toy file
> nor with a 5000+ lines file (with 55 lines moved).
> 
> git init
> echo A > foo
> echo B >> foo
> git add foo
> git commit -m initial
> echo B > foo
> echo A >> foo
> git commit -a -m swapped
> 
> The results are:
> $ git blame -M -s -- foo
> ^e3abca2 1) B
> 6189cb46 2) A
> 
> I would have expected:
> ^e3abca2 1) B
> ^e3abca2 2) A
> 
> Oh, look! This produces the expected result:
> $ git blame -M1 -s -- foo

Right. Your toy lines aren't long enough to be considered "interesting" by the default score. From git-blame(1):

  -M[<num>]
  [...]
  <num> is optional but it is the lower bound on the number of
  alphanumeric characters that git must detect as moving/copying within
  a file for it to associate those lines with the parent commit. The
  default value is 20.
Whereas with a longer sample:
  git init
  seq 1 5000 >foo
  git add foo
  git commit -m initial
  sed -i '/^2..$/d' foo
  seq 200 299 >>foo
  git commit -a -m 'move 200-299 to end'

I get the expected result from "git blame -M" (i.e., everything attributed to the root commit).

> But neither helps with my 5000+ lines file. Does it mean that the lines
> were changed? But I'm sure they were just moved! Please help!

What does the file look like? I think blame has some heuristics about lines which are uninteresting, and maybe you are triggering a corner case there.

-Peff
Previous: Johannes SixtNext: Johannes Sixt
Message 2 of 5 in “How to verify that lines were only moved, not edited?”
  1. Johannes SixtOct 19, 2011
  2. Jeff KingOct 19, 2011
  3. Johannes SixtOct 20, 2011
  4. Junio C HamanoOct 19, 2011
  5. Johannes SixtOct 20, 2011

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.