Open a folder inside a git repository and cwdio shows you what git knows: which files changed, which are new, which are ignored, what branch you are on and how far ahead or behind it is — in the file list itself, before you open anything.
What it does
- Status column. Modified, added or untracked, and ignored files carry a badge; a folder shows the highest-precedence state of anything under it; clean files show nothing. The column fills after the listing has painted, so it never slows a directory down.
- Branch in the status bar.
⎇ mainplus a↓behind ↑aheadbadge, read straight from.git/HEAD(no git process) and refreshed live when something else — the embedded terminal, another tool — checks out a different branch. - Changes view (Ctrl+Shift+G). Every changed file with a diff, per-file stage / unstage checkboxes, Stage all / Unstage all, Commit with an Amend last commit option that pre-fills the previous message, Stash (named, including untracked files) with a list to apply / pop / drop, and Discard behind a two-step confirm — an untracked file’s discard goes to the Recycle Bin.
- Branch switcher. The status-bar chip opens a keyboard-first picker: type to filter, Enter to
check out; a name that does not exist offers Create branch; rows can be renamed inline (F2)
or deleted (safe
-d, with a visible Force delete escalation for an unmerged branch). - History view (Ctrl+Shift+H). The log, filterable by subject, author or hash; Enter on a commit shows its full patch, coloured, with a strip of the files it touched — click a chip to jump to that file’s section; a button copies the hash.
- Fetch / pull / push. A Sync row in the changes view (and Go-menu / palette commands): fetch with prune, pull (fast-forward only by default; merge or rebase offered on divergence; abort on conflict), push, and Publish branch when there is no upstream yet.
How to use it
- Navigate into any folder of a repository. Badges appear; the status bar shows the branch.
- Ctrl+Shift+G to review changes: tick the files to stage, write a message, Commit.
- Click the branch chip to switch or create a branch; Ctrl+Shift+H to read the history.
- Push from the Sync row. If a credential is refused, the view says so and points you to the embedded terminal, where your git can prompt and cache once.
How it stays cheap and safe
- Repository detection is a filesystem walk for
.git, not agit rev-parsespawn; the vast non-repo parts of your disks never start a process. The onegit statusper repo folder is timeout-bounded and de-duplicated in flight. - Network operations run non-interactively — stdin closed,
GIT_TERMINAL_PROMPT=0, a generous killable timeout — so a hidden credential prompt can never hang the app. cwdio addsssh -o BatchMode=yesonly if you have configured neitherGIT_SSH_COMMAND,core.sshCommandnorGIT_SSH; your own ssh setup always outranks it. - Every command that can lose work — discard, drop stash, delete branch, force-push — is a two-step confirm; every one that cannot (stage, unstage, commit, stash, switch) just runs.
What it deliberately does not do
- It does not store your git credentials or tokens, and it does not manage remotes beyond
origin. - It is not a merge-conflict resolver: a conflict offers Abort and leaves the working tree for you and your editor.
- Worktrees and submodules whose
.gitis a file are not (yet) recognised for the branch chip and history.
Related
- Terminal sync — the shell that opens in the repo folder you are viewing.
- Compare and sync — the two-file diff viewer.
- Search — content search that honours
.gitignore.