// blog
Notes from building it.
Git internals, the pull-request loop across three forges, and what it takes to make AI optional in a tool people trust with their work.
- 9 min read
What FETCH_HEAD is, and why you shouldn't merge it
FETCH_HEAD holds whatever the last fetch brought — any fetch, including your editor's. Merge it by name and the branch can swap between your two commands.
- 9 min read
git pull --rebase deleted your commit: the rescue and the reason
A force-pushed branch plus git pull --rebase silently drops commits you pushed. The reflog rescue, the fork-point mechanism, and why no flag prevents it.
- 8 min read
Force push without overwriting your teammate's work
git push --force-with-lease protects you only until something fetches. The gap, demonstrated live, and the flag that closes it: --force-if-includes.
- 6 min read
Work on two branches at once with git worktree
git worktree gives a second branch its own folder — one repository, two working trees, no stash dance. The rules that keep it safe, and the cleanup.
- 9 min read
Update a Git branch without checking it out
git fetch origin main:main moves a branch while you stay on another. The refspec that does it, the refusals that protect you, and the diverged case.
- 2 min read
I use AI every day. My Git client still has an off switch.
GitDesktop is AI-native. One toggle hides all of it. On agency, trust, and the Git client that's left when the AI is gone.
- 10 min read
Will this merge conflict? Find out without merging
git merge-tree does the whole merge in memory and names every file that would conflict — without touching your working tree, your index, or your branch.
- 7 min read
The whole loop, one window: why I built this Git client
Pull requests that start before you push, branch updates without switching, and guardrails that aren't a pricing tier — the assumptions behind GitDesktop.
- 4 min read
Recovering a dropped stash: what git fsck can still find
A dropped or lost git stash is almost never gone. How to find it with git fsck, tell the real stash commit from its index twin, and get the work back.
Topics →
- git (8 posts) (8 posts)
- workflow (5 posts) (5 posts)
- recovery (3 posts) (3 posts)
- merge (2 posts) (2 posts)
- ai (1 posts) (1 posts)
- branches (1 posts) (1 posts)
- conflicts (1 posts) (1 posts)
- force-push (1 posts) (1 posts)
- pull-requests (1 posts) (1 posts)
- rebase (1 posts) (1 posts)
- stash (1 posts) (1 posts)
- worktrees (1 posts) (1 posts)