Hi, this is a really common situation and the good news is there’s a solid, free workflow for it. It comes in two halves: first shrink the number of places where you’ve touched the theme, then manage what’s left with Git. Neither requires you to be a developer.
Part 1: move as many customizations as possible out of the theme files
Every change you make inside the theme is a change you’ll have to carry forward with each update. So before anything else, check which of your tweaks can live somewhere that survives a theme update untouched:
The newsletter signup you switched to Portal: most modern themes already support Portal natively, and a new theme version may well have made your patch unnecessary. Check the new version’s changelog for that first.
The “Become a member” links pointing to /membership/: if the theme exposes that as a setting (Ghost Admin > Design > Site-wide or theme settings), use it. If not, a small snippet in Code Injection (Settings > Code injection > Site footer) can rewrite those links with a few lines of JavaScript, and Code Injection survives every theme update. Same goes for CSS changes: put them in Site header inside a <style> block instead of editing the theme’s CSS.
After this pass you’ll usually find that only two or three real code changes remain. That’s a very different problem from “several small changes I might forget”.
Part 2: keep the rest under version control with GitHub Desktop
Git sounds intimidating but for this exact use case it’s a three-step routine, and GitHub Desktop (free) hides all the command-line stuff. The trick is to keep two branches: one that only ever contains the official theme as released, and one with your version on top of it. Set it up once:
- Create a folder, put the original version of the theme in it (the one you started from, before your edits), open it in GitHub Desktop and commit it. Call this branch
upstream.
- Create a new branch from it called
mine, paste your customized theme files over it, and commit. Git now knows exactly what you changed, file by file, line by line, and the diff view shows it to you. That’s your “notes” from now on, and it can never be incomplete because Git generated it.
Then, each time a new version comes out:
- Switch to
upstream, paste the new official version over the folder, commit. The diff now shows you exactly what changed in the theme, inside every file.
- Switch to
mine and choose “Merge upstream into mine”. Git carries the theme’s changes over and re-applies your customizations automatically.
- If Git and the theme author edited the same lines, GitHub Desktop flags a conflict and shows both versions side by side; you pick which one to keep. With two or three customizations this happens rarely and is a two-minute job.
- Zip the theme folder, upload it in Ghost Admin, done. Next release, repeat.
If you’d like a visual side-by-side comparison beyond what GitHub Desktop shows, Meld (Windows/Linux) and Kaleidoscope or Beyond Compare (Mac, paid) are good, but honestly the built-in diff is enough for this.
One extra tip: keep a short CUSTOMIZATIONS.md file inside your theme folder listing what you changed and why. It travels with the theme, it shows up in the Git diff, and future-you will thank present-you.
Hope that helps; happy to clarify any step if you get stuck.