Lumide provides Git indicators directly on the editor canvas and status bar.
Editor Git Indicators#
1. Gutter Change Markers#
Color-coded markers in the line number gutter indicate modifications against HEAD:
- 🟩 Green: Added lines.
- 🟦 Blue: Modified lines.
- 🔺 Red Triangle: Deleted lines.
Click any gutter marker to open the Diff Block Popup to inspect previous text or revert the line modification.
2. Inline Git Blame#
Faded ghost text at the end of the active cursor line shows commit authorship:
void initDatabase() { • Simon Pham, 3 days ago • feat: add SQLite persistence
- Shows author, relative age, and commit message.
- Hover for commit card with author avatar, email, summary, date, hash, and file diff.
- Blame summaries containing co-author entries render stacked avatars. Standard Git blame supplies only the subject line, so body trailers are currently omitted.
- Avatars resolve from remote hosting CDNs (GitHub, GitLab, Codeberg, Gitea) or Gravatar.
3. File Tree Status Colors#
- Green: Untracked / New.
- Yellow / Amber: Modified.
- Red: Merge conflict.
- Gray: Ignored by
.gitignore.
4. Branch Indicator#
Shows the current branch, with a green arrow and count for commits to pull and a blue one for commits to push. Click it to pull, push, fetch, open C.O.R.G.I. or switch branches: type to filter the actions and the local and remote branches, move with
↑ / ↓ and press Enter. On a detached HEAD it shows the commit's short id.
5. Several Repositories#
When the folders of a multi-root workspace sit in more than one repository, Git works on the active repository: the repository of the file you are editing. The branch indicator names it, such as api / main.
- Switch repository: pick one under Repositories in the branch indicator's menu, run Git: Select Repository…, or switch in C.O.R.G.I. Your pick holds until a file of another repository gets focus; files outside Git leave it as it is.
- Fetch, Pull, Push, New Branch, Stash and Unstash act on the active repository, and their messages name it. A command picked from the branch indicator's menu acts on the repository the indicator showed, even if you switch files meanwhile. Push pushes the branch it was started for and pushes nothing if another branch got checked out while it waited. A branch that tracks a branch of another name asks where to push it, as it does for a branch without upstream.
-
Fetch All, Pull All and Push All… work in every repository, a few at a time, and report what happened in each. They are in the branch indicator's menu and the Git menu when there are several repositories, and always in the Command Palette. Repositories without a remote, on a detached
HEADor without an upstream branch are skipped and named. Push All… lists every repository with where it pushes and how many commits wait; the ones with commits for their upstream are ticked, and a branch without upstream can be ticked to push it as a new branch. A branch that tracks a branch of another name, such asfeaturetrackingorigin/main, is listed as a new branch,origin/feature, and pushing makes that its upstream. Enter doesn't push; click Push. A repository switched to another branch after the list opened is skipped, never pushed with the wrong branch. - Unsaved files: Pull All, Push All… and every checkout save the open editors of the repositories they touch first, so an editor never writes an old branch's text over the new one later. If a file can't be saved, the command stops and says so.
- Credentials: Fetch All, Pull All and Push All… never ask for a password or passphrase, so repositories working side by side can't wait on prompts. A repository that needs credentials is reported with authentication required; run Fetch, Pull or Push in it alone to sign in. Saved credentials (credential helpers, an SSH agent) work as usual.
-
Branch Operations in All Repositories (
git.sync_branch_operations): off by default. On, checking out a branch switches every repository that has it, and a new branch is created in every repository. Checkout is refused while a repository to switch has uncommitted changes, as Git reports them at that moment. If one repository fails, every repository that moved goes back to where it was, the failing one included, and a branch the checkout or New Branch created is deleted again.
In C.O.R.G.I., All Repositories lists the changes of every repository, commits one message to several and merges their histories by date. See Several Repositories in C.O.R.G.I..
Git commands of one repository run one after another, C.O.R.G.I.'s included, so a pull never races a commit or a push in the same repository. A repository and a submodule of it that is also a workspace folder take their turns too.
6. Git in a Shared Workspace#
As a guest in someone's shared workspace, Git stays on the host, in the folders the host shares.
- Every role sees the Git status the host publishes: status colors and ignored files in the Files tree, conflicts, gutter markers against the file's last committed version, and the branch indicator. Nothing runs Git for it on your side, and a role change keeps it.
- Trusted guests also run Git on the host: blame, C.O.R.G.I., switching branches, and Fetch, Pull and Push. Below Trusted, these say Git needs the Trusted role, and nothing is asked of the host. When the host makes you Trusted, they work without reopening the window.
- Shared folders only: each shared folder in a repository is a repository of its own for you, named after the folder. When the host shares a folder from inside a larger repository, you see that folder's changes only, with paths from the folder; the rest of the repository and where it lies stay out of sight. A folder the host stops sharing leaves your repositories.
- History: C.O.R.G.I. lists every commit of the repository, so you can follow the branch. A commit's files and diffs, stashes and file history show only the shared folder's files; a commit that changed only unshared files shows no files.
- Commits record only the shared folder: when the host has staged files outside it, your commit is refused until the host commits or unstages them.
- Stashes: Stash saves and clears only the shared folder's changes. A stash that changes files outside the shared folder can't be applied, popped or dropped by you; the host can.
7. History of Selected Lines#
Right-click in the editor and choose Show Git History, or Show Git History for Selection with text selected, to list the commits that changed those lines, newest first. Pick one to see its diff of those lines; Open Commit shows the whole commit. Lines you added or changed since the last commit have no history yet; the others are found where they are in the last commit, even after edits above them.
8. Rolling Back Changes#
Rollback in the file tree or C.O.R.G.I. lists the files it will roll back, with each one's change and folder, before you confirm, and rolls back only those. Local History keeps a copy of each file first. When it can't (it is off, or a file is too large or in an ignored folder), the dialog marks those files: their changes are lost for good. A submodule goes back to the commit the repository records; its uncommitted work is kept in a stash inside it.
Settings#
Configured under Settings -> Git:
-
Inline Blame (
git.inline_blame.enabled): Toggle blame ghost text (trueby default). Takes effect in open editors right away. -
Inline Blame Delay (
git.inline_blame.delay_ms): Delay in ms before blame appears on the line the cursor moves to (default:0). -
Blame Line Diff (
git.inline_blame.show_line_changes): Show line changes in hover popup (trueby default). -
Blame Diff Style (
git.inline_blame.line_diff_style): Diff style in hover popup (lineorhunk). -
Git Avatars (
git.avatars.enabled): Show author avatars across Git popups and panels (trueby default). -
Gravatar Fallback (
git.avatars.gravatar_fallback): Use Gravatar when no provider URL can be resolved (falseby default). -
Gravatar Style (
git.avatars.gravatar_default_style): Gravatar placeholder style (retro,identicon,mp). -
Hosting Providers (
git.hosting_providers): Custom Git host endpoints and avatar URL templates; defaults to an empty list. -
Diff View Mode (
git.diff_view_mode): Default diff style (unifiedorsplit). -
Diff Soft Wrap (
git.diff_soft_wrap): Soft-wrap long lines in diff viewers (trueby default). -
Separate Staged / Unstaged Lists (
git.separate_staged_unstaged_lists): Split staged and unstaged file lists (trueby default). -
Commit Message AI Suggestions (
git.commit_ai_suggestions): Suggest the commit message as ghost text while typing (trueby default); the Generate button works either way. -
Branch Operations in All Repositories (
git.sync_branch_operations): With several repositories, check out and create branches in all of them at once (falseby default). -
Stage Resolved Conflicts (
git.stage_resolved_conflicts): Stage a conflicted file once no conflict markers are left in it (trueby default). -
Show Ignored Files (
git.show_ignored_files): Show.gitignorefiles in tree (trueby default).
Next Steps#
- C.O.R.G.I. Git Client — Visual commit graph and staging.
- Diff Viewer — Split and unified diff comparisons.
