Frontmatter
| id | 8457 |
| title | Optimize Release Squash using Git Plumbing |
| state | Closed |
| labels | enhancementbuild |
| assignees | tobiu |
| createdAt | Jan 9, 2026, 11:23 AM |
| updatedAt | Jan 9, 2026, 11:36 AM |
| githubUrl | https://github.com/neomjs/neo/issues/8457 |
| author | tobiu |
| commentsCount | 1 |
| parentIssue | null |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Jan 9, 2026, 11:36 AM |
Optimize Release Squash using Git Plumbing
tobiu assigned to @tobiu on Jan 9, 2026, 11:25 AM

tobiu
Jan 9, 2026, 11:35 AM
Input from Gemini 3 Pro:
✦ Implemented the optimization for the release workflow. The
buildScripts/publishRelease.mjsscript now usesgit commit-treeandgit update-refto create the main branch squash commit. This bypasses the need forgit merge, eliminating merge conflicts caused by file renames and moves. The wording in the release notes has also been updated to "All changes delivered in 1 atomic commit:".
tobiu closed this issue on Jan 9, 2026, 11:36 AM
To resolve persistent merge conflicts during the "Squash to Main" phase of the release workflow, we will replace the high-level
git mergestrategy with low-level git plumbing commands.Problem: Massive refactorings and file moves without
git mvcause Git's rename detection to fail duringgit merge --squash, leading to extensive conflicts that require "accept theirs" resolution.Solution: Implement the "No-Checkout Snapshot" strategy in
buildScripts/publishRelease.mjs. Instead of merging, we will construct a new commit onmainthat points directly todev's file tree.Plan: Update
buildScripts/publishRelease.mjsto:origin/mainto get the latest parent hash.devHEAD (git rev-parse HEAD^{tree}).git commit-treeto create a new commit object:dev's treeorigin/mainmainref to this new commit (git update-ref).origin/main.Benefits:
mainis a byte-for-byte copy ofdev.