Capabilities
Everything TinyGit can do with Git.
TinyGit runs Git in-process, via libgit2, with no command-line git
to install or shell out to. Here's the complete, current list of
what it supports.
Repositories & syncing
| Operation | Details |
| Clone | Clone a remote repository, with progress. |
| Init | Initialize a new local repository. |
| Multi-repo sidebar | Add unlimited repositories and organize them into folders. |
| Fetch | Fetch from a remote. |
| Pull | Pull the current branch. |
| Force Pull | Fetch, then hard-reset onto the upstream so the branch matches the remote exactly, optionally clearing untracked files. |
| Push | Push, including force-with-lease and automatic set-upstream. |
| Cross-branch push | Push one local branch straight into a different remote branch. |
Staging & committing
| Operation | Details |
| Stage / unstage | Per file or all at once. |
| Discard changes | Per file or all at once. |
| Stop tracking | Untrack a file while leaving it on disk. |
| Delete a file | Removes it straight to the Trash. |
| Commit | Commit staged changes. |
Branches
| Operation | Details |
| Create / checkout / rename / delete | Rename preserves the branch's reflog. |
| Track a remote branch | Checkout a remote branch as a new local tracking branch. |
| Merge | Merge a local branch into the current branch. Real conflicts hand off to the in-app 3-way editor. |
| Squash from here to latest | Fold a commit and everything after it, up to the tip, into one. |
| Continue / abort | Continue or abort an in-progress merge, cherry-pick, revert, or rebase. |
Rewriting history
| Operation | Details |
| Cherry-pick | Apply a commit from elsewhere onto the current branch. |
| Revert | Create a new commit undoing a previous one. |
| Reset | Soft, mixed, or hard. |
Stash
| Operation | Details |
| Create / apply / drop / list | Full stash lifecycle, with a diff view per stashed file. |
| Operation | Details |
| Create / delete / rename | Rename recreates the tag under the new name, since Git has no native rename for tags. |
| Checkout a tag | Lands on a detached HEAD, same as checking out a commit. |
Remotes
| Operation | Details |
| Add / remove / rename | Also change a remote's URL. |
| Delete a remote branch | Deletes the branch on the remote. |
Conflict resolution
| Operation | Details |
| In-app 3-way editor | Take one side, take both, or hand-edit each conflict, then stage the result. |
Repository upkeep
| Operation | Details |
| Edit .gitignore | Per-repository or the global excludes file. |
| Edit Git config | Repository or global config, directly. |
| Optimize | Writes a commit-graph, then a best-effort fetch-with-prune to drop stale remote-tracking branches. |
Authentication
| Operation | Details |
| SSH | Uses your existing keys, SSH agent, and ~/.ssh/config. |
| HTTPS | Uses a Personal Access Token you add per host. |
| Operation | Details |
| Search | Search across a repository's commit history. |
| External editor | Open a changed file straight into your registered editor (VS Code, Xcode, and others). |
| Themes | 11 built-in themes, tuned across the sidebar, toolbar, commit list, and diff view. |
Not currently supported
A few things TinyGit deliberately doesn't do yet, so there's no
guessing:
- Starting a rebase. libgit2 has no interactive rebase, so "Squash from here to latest" (above) is the supported substitute.
- Git submodules.
- Git LFS.
- Multiple worktrees per repository.
- Blame / line history.
- GPG-signed commits.
- HTTPS credential helpers (the macOS Keychain helper,
gh auth, and similar). Use a Personal Access Token instead.
- Full gc / repack. "Optimize" (above) is the in-process stand-in.
- Launching an external merge tool. Replaced by the built-in 3-way editor.