Git's handling of submodule merges, especially when it comes to conflicting submodule updates, is the cause of the behavior you're seeing.
1- Merging Two Commits:
Git tries a three-way merge with the two commits (A and B) and the common ancestor (P) when you merge them. Git can give you a method to manually settle any conflicts that may arise in the submodule updates. You can still resolve the dispute even though you see the error because of this.
2- Merging Several Commits:
Git tries to do a "octopus" merge, which is designed for merging several branches, when you attempt to merge more than two commits (such as A, B, and C). However, compared to standard two-way merges, octopus merges have more stringent requirements and manage conflicts differently. Git fails entirely without offering a chance to resolve conflicts because it is unable to do so automatically, particularly when it comes to submodules.