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

回复: [BUG] git merge sometimes loses changes from one branch

From
GTGuo Tingsheng <coricraft16@outlook.com>
Date
Oct 28, 2025, 16:12 UTC
Message-ID
<SN6PR03MB4285533B67E31D36172A4C34AEFDA@SN6PR03MB4285.namprd03.prod.outlook.com>
In-Reply-To
<CABPp-BGeZ6no5LdBGKjykQLqUHRjFis7ZtGdEwnzg0gy_CkLqA@mail.gmail.com>
Hello Git developers,

I would like to report a potential issue in Git’s merge behavior, where changes from one branch may be lost even when the other branch does not modify the same location.

To make it easier to reproduce, I have open-sourced this example in a public repository:
Repository: https://github.com/CoriWork/bug-replay.git
You can clone the repository and follow the README.md to replay the bug!
---
Environment:
- Git version: 2.43.0
- OS: Ubuntu 24.04 LTS
---
Steps to reproduce:
1. On branch B, modify a file at a certain location:
@@ -1068,9 +1026,7 @@ public final class AutoBuilderCompilationTest {
             "  }",
             "}");
     Compilation compilation =
-        javac()
-            .withProcessors(new AutoBuilderProcessor())
-            .compile(javaFileObject);
+        javac().withProcessors(new AutoBuilderProcessor()).compile(javaFileObject);
     assertThat(compilation).failed();
     assertThat(compilation)
         .hadErrorContaining(

2. On branch A, make no changes to this location.

3. Merge branch A and branch B.

---

Expected result:
The merge should retain the change made in branch B:

@@ -1068,9 +1026,7 @@ public final class AutoBuilderCompilationTest {
             "  }",
             "}");
     Compilation compilation =
-        javac()
-            .withProcessors(new AutoBuilderProcessor())
-            .compile(javaFileObject);
+        javac().withProcessors(new AutoBuilderProcessor()).compile(javaFileObject);
     assertThat(compilation).failed();
     assertThat(compilation)
         .hadErrorContaining(

Actual result:
Git sometimes produces a merged result where the modification from branch A
is lost, yielding:

   @@ -1026,7 +1028,9 @@
   public final class AutoBuilderCompilationTest {
                "  }",
                "}");
       Compilation compilation =
           javac()
            .withProcessors(new AutoBuilderProcessor())
            .compile(javaFileObject);

---

Additional information:
- This issue occurs even when branch B does not modify the same location.
- It appears to happen deterministically under a specific construction that
  splits one patch into two disjoint sets of hunks, applies them separately
  to create two branches, and then merges them back.
- The merged result can differ from the expected content of the original commit.

Thank you for your time and your work maintaining Git.

Best regards,  
Guo Tingsheng  
< CoriCraft16@outlook.com >
Previous: Elijah Newren
Message 3 of 3 in “[BUG] git merge sometimes loses changes from one branch”
  1. Guo TingshengSep 12, 2025
  2. Elijah NewrenSep 12, 2025
  3. 回复: [BUG] git merge sometimes loses changes from one branchGuo Tingsheng, Oct 28, 2025

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.