Avoid auto-forwarding main branches checked out in other worktrees (#5621)
After fetching, we auto-forward main branches that have fallen behind their upstream, but skip any that are currently checked out in another worktree — otherwise we'd update the ref behind that worktree's back, leaving its working copy showing the inverse of what was just fetched. The skip check had a hole though: when starting lazygit while no worktrees have a main branch checked out, leaving it running in the background, and then checking out a main branch in one of the other worktrees outside of lazygit (e.g. in a lazygit instance in another terminal, or using `git checkout` in the shell, or using some other git client or IDE), then lazygit wouldn't notice the change, and the next fetch would auto-forward main even though it is now checked out in a worktree. The fix is to include `WORKTREES` in the post-fetch refresh scope when auto-forwarding is enabled. We gate on the config so users with auto-forward disabled don't pay for an extra `git worktree list` plus per-worktree rev-parse on every fetch tick. A few small things picked up along the way landed as separate commits first: - Preserve the empty-slice fallback in `loadWorktrees` when `git worktree list` fails — the fallback was being overwritten by the nil return value on the next line. - Add `PULL_REQUESTS` to the manual fetch refresh scope to match the background fetch; looks like an oversight from when PR support was added. - Extract `BranchesHelper.PostFetchRefresh` so the two fetch paths can't drift again. Fixes #5020.
S
Stefan Haller committed
608c90ae3c1c99ffad9324bfc2613d9d46599992
Committed by GitHub <noreply@github.com>
on 5/21/2026, 12:27:44 PM