Christoph 96f7c9f2df feat: add selective line restoration from historical commits
Add a new Tauri command to produce a diff between the working file and a historical commit (get_file_restore_patch) and support a new apply action ("restore-lines") that validates and applies only text-line changes for a single regular file.

Behavior changes and constraints:
- Fetch a filtered reverse diff for a file in a commit so UI can display selectable lines from an older revision.
- Applying "restore-lines" verifies the target is a regular file, rejects binary/metadata patches, and ensures the patch only modifies the selected file.
- Restored lines are applied to the working tree without staging other changes; the index is preserved.
- The operation rejects stale patches or patches targeting the wrong file.

UI wiring:
- Compare dialog gets a "Restore lines…" action for applicable modified files and opens the line-patch dialog in restore mode.
- Line-patch dialog gains a restore mode (restoreCommit) with adjusted UI/rendering to pair removed/added lines, helper text, and dedicated "Restore selected" / "Restore hunk" actions.
- App integration handles fetching the restore patch, applying selected lines, and refreshing views.

Tests:
- Add tests covering correct behavior (preserve unstaged/staged changes and index) and guard cases (stale/wrong-file patches).
2026-09-18 20:31:33 +02:00
2026-09-11 23:08:40 +02:00
2026-09-11 23:08:40 +02:00
2026-06-27 13:03:07 +02:00
2026-06-27 13:03:07 +02:00
2026-06-29 14:40:42 +02:00
2026-06-27 23:08:19 +02:00

Gitty Logo

Gitty

A lightweight, modern Git client built with Tauri.

Fast, simple, and designed for developers who want a clean Git experience without unnecessary complexity.


Features

  • 🚀 Fast native performance
  • 🌿 Branch management
  • 📝 Commit history
  • 🔄 Pull, Push & Fetch
  • 🔀 Merge & Rebase
  • 📦 Repository management
  • ☁️ GitHub, GitLab, Azure DevOps, and Gitea integrations
  • 🗄️ Git LFS detection, tracking and object management
  • 🧩 Submodule management, including nested repositories
  • 🎨 Modern and intuitive UI

Submodules

Cloning automatically downloads and initializes submodules, including nested submodules, at their recorded commits. The Submodules toolbar badge counts modules that still need initialization. After a successful pull, Gitty offers to initialize missing modules; choosing Later keeps the badge visible.

Open a repository and select Submodules in the repository toolbar. The dialog shows each submodule's recorded commit (from its parent's index), checked-out commit, and local changes. You can add a submodule, initialize it, check out its recorded commit, stage a changed reference, synchronize its URL from .gitmodules, or open it as a repository tab. Nested submodules are included by default. Use Change commit or tag to select a local tag or enter a commit hash; Fetch tags & commits downloads remote revisions using the submodule login. Checking out a revision leaves the parent index unchanged until you stage its reference.

Checking out a recorded commit is blocked when the submodule has local changes; commit or stash them in that repository first. Adding a submodule stages .gitmodules and the new reference. Commit these changes in the parent repository. Network operations use your configured Git credential helpers or SSH credentials.

📸 Preview

Screenshots comes later.


🛠️ Built With

  • Tauri
  • Rust
  • Svelte

🚧 Status

Gitty is currently under active development.

Contributions, feedback and feature requests are always welcome!


📄 License

MIT License


Arch Linux

Install Gitty from the AUR with an AUR helper:

yay -S gitty-desktop

To install the prebuilt native Arch package instead of compiling from source:

yay -S gitty-desktop-bin

Or build the AUR package manually:

git clone https://aur.archlinux.org/gitty-desktop.git
cd gitty-desktop
makepkg -si

The source recipe downloads the public Gitea release archive and builds Gitty. The -bin recipe repackages the native .pkg.tar.zst release artifact. The release pipeline updates both packages' versions, checksums, and .SRCINFO files.


Command line

Open an existing repository when Gitty starts:

gitty.exe --repo "D:\Projects\ExistingRepo"

Clone a remote into an exact local target folder and open it immediately:

gitty.exe --clone "https://example.com/team/project.git" "D:\Projects\Project"
gitty clone "git@example.com:team/project.git" "D:\Projects\Project"

--clone=<REMOTE> is also accepted. Relative target paths are resolved from the current working directory. Clone and repository requests are forwarded to the running window when Gitty is already open.


Git hosting integrations

Gitty connects to GitHub, GitLab.com, GitLab Self-Managed, Azure DevOps, and Gitea from Settings → Integrations. Each connection uses a personal access token that is stored in the operating system keychain instead of application settings. Azure DevOps can manage multiple organizations with separate URLs, usernames, and tokens.

After enabling a connection, open Clone → Integrations to load the repositories available to that account. Repositories are sorted alphabetically and can be filtered, refreshed, selected, and cloned directly with the stored credentials.


Git LFS

Gitty bundles the git-lfs executable in its desktop installers and checks it at runtime before offering LFS actions. Arch packages also declare git-lfs as a dependency so Git hooks and command-line workflows outside Gitty use the same extension. The repository toolbar exposes LFS setup, tracked patterns, object downloads, and safe cache pruning. After every successful clone or pull, Gitty detects LFS usage and automatically downloads the required LFS objects with the same remote and credentials, so no second pull is needed. Fresh clones also get repository-local LFS filters and the pre-push hook before they are opened.

S
Description
No description provided
Readme
12 MiB
2026.9.8
Latest
2026-09-18 18:51:36 +00:00
Languages
Svelte 50.8%
Rust 28.7%
CSS 12.9%
TypeScript 5.4%
JavaScript 1.1%
Other 1%