> Le 12 sept. 2025 à 18:57, Elijah Newren <newren@xxxxxxxxx> a écrit : > > On Fri, Sep 12, 2025 at 6:38 AM Guo Tingsheng <CoriCraft16@xxxxxxxxxxx> wrote: >> >> Hello Git developers, >> >> I would like to report a potential issue in Git's merge behavior, where semantically independent changes at the same position are reported as a conflict, even though they could be merged automatically. >> >> Environment: >> - git version: 2.43.0 >> - OS: Ubuntu 24.04 LTS >> >> Steps to reproduce: >> 1. Start with a file containing only: >> >> public class Calculator { >> } >> >> 2. On branch A, add a new method `add`: >> >> @@ -1,1 +1,3 @@ >> public class Calculator { >> + public static double add(double a, double b) { >> + return a + b; >> + } >> >> 3. On branch B, add a new method `subtract`: >> >> @@ -1,1 +1,3 @@ >> public class Calculator { >> + public static double subtract(double a, double b) { >> + return a - b; >> + } >> >> 4. Merge branch A and branch B. >> >> Expected result: >> - The merge should succeed automatically, producing a file that contains both methods (order does not matter). >> For example: >> >> public class Calculator { >> public static double add(double a, double b) { >> return a + b; >> } >> public static double subtract(double a, double b) { >> return a - b; >> } >> } >> >> Actual result: >> - Git reports a conflict and aborts the merge, requiring manual conflict resolution. >> >> Additional information: >> - Although the two changes occur at the same location in the file, they are independent additions with no semantic overlap. >> - It would be desirable for Git's merge algorithm to automatically combine such changes, as the final merged state is deterministic and conflict-free. >> - This limitation may impact developer productivity in real-world projects where multiple contributors extend the same class or configuration file independently. > > Thanks for the report, but how is Git supposed to know that they are > independent changes with no semantic overlap? Git doesn't understand > the semantics of the files it tracks. It has no idea whether the > things being added are functions, or statements/expressions within a > function, or college essays, or hand-written recipes, or data dumps, > or anything else. It would need to know those semantics, which would > probably require something on the level of use of AI to determine that > the changes are independent non-competing additions with no semantic > overlap and that you want to keep both. Sorry, can’t resist: we’ve been writing semantic analysis code for decades. It wouldn’t take AI to get this right. What’s hard about the situation is that it doesn’t generalize easily: a semantic analyzer that can resolve conflicts for one file, project, language, etc., is not necessarily of any help to its brethren. Still, if you write a lot of Java or similar code and have this problem frequently, building a merge strategy option or mergetool you can use to resolve this easily seems worthwhile. (Not something mainline Git needs, of course, for all the reasons pointed out here.)