Git.__call__'s error handler prints only e.stderr (core.py:50), but git writes conflict/failure detail to stdout, so a failing command reports nothing useful — unlike the success path in callgit, which returns r.stdout + r.stderr.
Repro: in a repo where the merge conflicts, Git(path).merge('upstream/main') prints ERROR: git merge upstream/main: with an empty message and returns None; git's own CONFLICT (content): Merge conflict in ... / Automatic merge failed lines are lost.
Git.__call__'s error handler prints onlye.stderr(core.py:50), but git writes conflict/failure detail to stdout, so a failing command reports nothing useful — unlike the success path incallgit, which returnsr.stdout + r.stderr.Repro: in a repo where the merge conflicts,
Git(path).merge('upstream/main')printsERROR: git merge upstream/main:with an empty message and returnsNone; git's ownCONFLICT (content): Merge conflict in .../Automatic merge failedlines are lost.