gitgud is a desktop Git client built with Tauri, React, and Rust for everyday local repository workflows.
gitgud currently supports:
- Opening an existing local Git repository from the native folder picker.
- Working with multiple repository tabs in the same session.
- Restoring previously opened repositories when the app is reopened.
- Refreshing repository state automatically on focus and on a timed interval.
- Viewing repository status split into
stagedandunstagedchanges. - Staging and unstaging files individually or in bulk.
- Creating commits from the UI.
- Viewing recent history as a lightweight commit graph.
- Inspecting commit metadata and changed files.
- Running
fetch,pull, andpush. - Viewing the current branch and upstream ahead/behind status.
- gitgud only works with existing local repositories. It does not initialize or clone repositories.
- Remote synchronization uses the system
gitbinary withGIT_TERMINAL_PROMPT=0, so interactive authentication flows are not handled inside the app. pullandpushrequire a local branch with an upstream already configured.- The visible history is intentionally limited to recent commits to keep the UI responsive.
- Commit detail depends on what Git can expose through the available diff. Empty commits or edge cases may show a notice instead of a file list.
- Conflict resolution, stash management, and repository creation are not included in the current version.
- Branch creation and checkout are implemented in the backend and covered by tests, but the current frontend does not yet expose a dedicated branch management flow.
Most workflow errors are surfaced through inline feedback in the main view or the affected panel, including:
- Opening a folder that is not a valid Git repository.
- Failing to refresh repository state.
- Stage or unstage failures.
- Commit rejection due to missing Git identity, an empty message, or no staged changes.
- Remote operations failing because of missing remotes, missing upstream configuration, authentication issues, or sync errors.
Use a test repository with at least one reachable remote.
- Open repository: select a valid Git folder and confirm the name, path, branch, status, and recent history load correctly. Then try a non-Git folder and verify the error message.
- Multi-tab workflow: open more than one repository, switch tabs, close and reopen the app, and confirm the repositories are restored.
- Individual stage: modify a tracked file, use the UI action to stage it, and confirm it moves from
UnstagedtoStaged. - Individual unstage: unstage the same file and confirm it returns to
Unstaged. - Bulk stage: leave multiple visible changes and use
Stage all; all files should move toStaged. - Bulk unstage: with several staged changes, use
Unstage all; all files should move back toUnstaged. - Commit: create a commit from staged changes and confirm it appears at the top of history and the working tree becomes clean.
- Working tree detail: select the working tree entry and confirm staged and unstaged sections reflect the current repository state.
- Commit detail: select a commit and validate its metadata, parents, and changed files.
- Fetch: create a remote commit from another clone, run
Fetch, and confirm the ahead/behind status updates. - Pull: with remote changes available, run
Pulland confirm local history updates. - Push: create a local commit, run
Push, and confirm the ahead count returns to0.
Requirements:
- Node.js
- Rust
- Tauri system dependencies for your operating system
- Git available in
PATH
Main commands:
npm install
npm run tauri devVerified in this repository:
cargo test --manifest-path src-tauri/Cargo.toml
npm run build