git/list[1] front-page[2] threads[3] people[4] search[5] about
wed 2026-10-07 16:51 UTC

Crash on git log with -L and -G on file rename

From
Matthew Hughes <matthewhughes934@gmail.com>
Date
Mar 3, 2026, 20:42 UTC
Message-ID
<aac-QdjY1ohAqgw_@desktop>
Hi,

I hit a crash (assertion error) running `git log` with both `-L` and `-G` under certain conditions. I've created script to reproduce the behaviour in a fresh git repo:

    #!/usr/bin/env bash
    set -o errexit
    git init .
    # Note: example is .rs file, but it should work with anything that -L understands
    echo "fn my_func() {}" > file.rs
    # 1. file named 'file.rs'
    git add file.rs
    git commit --message 'Add the file'
    # 2. separate branch with the file renamed
    git checkout -b some-branch
    git mv file.rs new_file.rs
    git commit --message 'Move the file'
    git checkout -
    git commit --allow-empty --message 'Some extra commit so we get a merge commit'
    # 3. merge: one parent has file.rs, the other has new_file.rs
    git merge --no-edit some-branch
    # 4. post merge, move the file back
    git mv new_file.rs file.rs
    git commit --message 'Move the file back'
    # 5. things go BOOM
    git log -L:my_func:file.rs -G '.'

I'm not sure if _every_ step in that script is necessary, but it's the simplest setup I could figure out to trigger the crash. Running that script I hit the error:

    git: line-log.c:1056: process_diff_filepair: Assertion `pair->two->oid_valid' failed.
    Aborted                    (core dumped) git log -L:my_func:file.rs -G '.'

The backtrace shows that the failed assertion occurs under `process_ranges_merge_commit`, so maybe there's an issue with the file being renamed on both sides of the merge?

The crash requires both flags to trigger, remove either and it will run fine.
I've tested the above on the `git` from my system package manager on Arch
Linux: git version 2.53.0, and one built from source at
2cc71917514657b93014134350864f4849edfc83 (the version of 'master' checked out
on my machine at the time). I don't think reproduction relies on any specific
config since I've had it trigger with both `GIT_CONFIG_GLOBAL` and
`GIT_CONFIG_SYSTEM` set to `/dev/null`

Just for reference, I originally triggered the bug in the `rustfmt` repo[1] (checked-out at cebab3e99259be82ff069e5ae89e91855d79e534) running:

    git log -G offset_left -L:format_trait:src/items.rs
Link: github.com/rust-lang/rustfmt [1]
Next: Kristoffer Haugsbakk
Message 1 of 4 in “Crash on git log with -L and -G on file rename”
  1. Matthew HughesMar 3, 2026
  2. Kristoffer HaugsbakkMar 3, 2026
  3. Junio C HamanoMar 4, 2026
  4. Koji NakamaruMar 4, 2026

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.