- CHANGELOG.md: add [Unreleased] 2026-04-16 section covering settings page, admin tools, password reset, re-extract, community page, SSE upload progress, and all bug fixes since 2026-04-10 - Remove docs-proposal.md (internal planning doc, not user-facing) - Remove publish/ directory (leftover artefacts from publish.sh, not meant to be tracked) - scripts/pull_feedback.sh: replace hardcoded default VPS IP with a required positional argument to avoid leaking server address - docs/squash-for-github.md: document the squash-for-github commit strategy for future reference
2.0 KiB
squash-for-github branch strategy
squash-for-github is a curated public-facing branch. It has its own orphan
history (unrelated to main) and grows by appending one large squash commit
each time you want to publish a batch of work.
When to use
Whenever main has accumulated enough work worth publishing — typically after a
meaningful feature set or before tagging a release.
How it works
squash-for-github and main have completely unrelated histories (different
root commits). Because of this, git merge --squash won't work. Instead, use
git commit-tree to create a new commit that carries main's file tree but
is parented to the current squash-for-github tip.
Steps
-
Collect commit messages to write the summary:
git log --oneline main ^squash-for-github -
Switch to the branch:
git checkout squash-for-github -
Create the squash commit (replace the message with your summary):
NEW=$(git commit-tree main^{tree} -p HEAD -m "feat: your summary here") git reset --hard $NEWOr as a one-liner with a heredoc for a multi-line message:
git reset --hard $(git commit-tree main^{tree} -p HEAD -m "$(cat <<'EOF' feat: short title - bullet one - bullet two EOF )") -
Verify:
git log --oneline squash-for-github | head -5 -
Push when ready:
git push origin squash-for-github # or force-push if you've rewritten history on the remote: git push --force origin squash-for-github -
Return to main:
git checkout main
Why not git merge --squash?
The two branches share no common ancestor, so git refuses with
fatal: refusing to merge unrelated histories. git commit-tree bypasses this
by directly constructing the commit object: it takes the tree (file snapshot)
from main, sets the parent to the current squash-for-github tip, and
attaches your custom message — no merge machinery needed.