paperclipai/paperclip · error · Error
Failed to compute a merged git tree for workspace restore.
Error message
Failed to compute a merged git tree for workspace restore.
What it means
Thrown by integrateImportedGitHead when `git merge-tree --write-tree` succeeds (no exception) but its stdout is empty, so no merged tree ID can be extracted. This is a defensive guard for an unexpected git output format — under normal operation merge-tree always emits a tree hash on the first line.
Source
Thrown at packages/adapter-utils/src/git-workspace-sync.ts:432
throw error;
}
}
let mergedTree;
try {
mergedTree = await runLocalGit(input.localDir, ["merge-tree", "--write-tree", currentHead, input.importedHead], {
timeout: 60_000,
maxBuffer: 256 * 1024,
});
} catch (error) {
const reason = error instanceof Error ? error.message : String(error);
throw new Error(
`Failed to merge concurrent remote git histories for ${currentHead.slice(0, 12)} and ${input.importedHead.slice(0, 12)}: ${reason}`,
);
}
const mergedTreeId = mergedTree.stdout.trim().split("\n")[0]?.trim() ?? "";
if (!mergedTreeId) {
throw new Error("Failed to compute a merged git tree for workspace restore.");
}
const mergeCommit = await runLocalGit(
input.localDir,
[
"commit-tree",
mergedTreeId,
"-p",
currentHead,
"-p",
input.importedHead,
"-m",
`Paperclip remote git sync merge ${input.importedHead.slice(0, 12)}`,
],
{
timeout: 60_000,
maxBuffer: 64 * 1024,
},View on GitHub (pinned to 67001ec6eb)
Solutions
- Check the git version installed locally — `merge-tree --write-tree` output format may differ in newer/older versions.
- Run `git merge-tree --write-tree <head1> <head2>` manually in the localDir to inspect the actual output.
- If the issue persists, file a bug with the git output and version information.
Defensive patterns
Strategy: try-catch
Try / catch
try {
await integrateImportedGitHead({ localDir, importedHead });
} catch (err) {
if (err instanceof Error && err.message.includes("Failed to compute a merged git tree")) {
// Unexpected git output — check git version and output format
const version = await runLocalGit(localDir, ["--version"], { timeout: 5_000, maxBuffer: 1024 });
logger.error(`Unexpected merge-tree output. Git version: ${version.stdout.trim()}`);
}
throw err;
} Prevention
- Pin the git version to a known-good release that supports merge-tree --write-tree.
- Run integration tests that exercise the merge path with the installed git version.
When it happens
Trigger: Calling integrateImportedGitHead where runLocalGit for `merge-tree --write-tree` resolves without error, but mergedTree.stdout.trim().split('\n')[0] is empty.
Common situations: A future git version changes merge-tree output format; git emitted only informational messages to stdout without the tree hash; an edge-case with identical trees or empty repos produces no output.
Related errors
- Failed to merge concurrent remote git histories for ${curren
- Failed to integrate concurrent remote git history for ${inpu
- Failed to reset local git index to HEAD after workspace rest
- Managed git install metadata is incomplete.
- Git update cancelled. Re-run with --yes to confirm executing
AI-assisted analysis of paperclipai/paperclip@67001ec6eb (2026-08-12).
Data as JSON: /api/errors/e2a94f23292f3b1e.
Report an issue: GitHub.