Repository navigation
Releases: ThirtyTech/tt-git
Release list
v0.12.0
Install
Linux (x64, arm64) and macOS (Apple Silicon):
curl -fsSL https://github.com/ThirtyTech/tt-git/releases/download/v0.12.0/install.sh | TTGIT_VERSION=v0.12.0 shWindows (x64, arm64), in PowerShell:
$env:TTGIT_VERSION = 'v0.12.0'; irm https://github.com/ThirtyTech/tt-git/releases/download/v0.12.0/install.ps1 | iexDesktop app
The desktop app, tt-git-gui, is a separate download. Each one also carries tt-git.
On Linux, the install script puts it in ~/.local:
curl -fsSL https://github.com/ThirtyTech/tt-git/releases/download/v0.12.0/install-gui.sh | TTGIT_VERSION=v0.12.0 shtt-git-gui-v0.12.0-linux-arm64.AppImage: Linux AppImagett-git-gui-v0.12.0-linux-arm64.deb: Debian and Ubuntu:sudo apt install ./tt-git-gui-v0.12.0-linux-arm64.debtt-git-gui-v0.12.0-linux-arm64.pkg.tar.zst: Arch Linux:sudo pacman -U tt-git-gui-v0.12.0-linux-arm64.pkg.tar.zsttt-git-gui-v0.12.0-linux-arm64.rpm: Fedora, openSUSE:sudo dnf install ./tt-git-gui-v0.12.0-linux-arm64.rpmorsudo zypper install ./tt-git-gui-v0.12.0-linux-arm64.rpmtt-git-gui-v0.12.0-linux-arm64.tar.gz: Linux, to unpack into~/.localor/usr/localtt-git-gui-v0.12.0-linux-x64.AppImage: Linux AppImagett-git-gui-v0.12.0-linux-x64.deb: Debian and Ubuntu:sudo apt install ./tt-git-gui-v0.12.0-linux-x64.debtt-git-gui-v0.12.0-linux-x64.pkg.tar.zst: Arch Linux:sudo pacman -U tt-git-gui-v0.12.0-linux-x64.pkg.tar.zsttt-git-gui-v0.12.0-linux-x64.rpm: Fedora, openSUSE:sudo dnf install ./tt-git-gui-v0.12.0-linux-x64.rpmorsudo zypper install ./tt-git-gui-v0.12.0-linux-x64.rpmtt-git-gui-v0.12.0-linux-x64.tar.gz: Linux, to unpack into~/.localor/usr/localtt-git-gui-v0.12.0-macos-arm64.dmg: macOS (Apple Silicon): open it and drag tt-git to Applicationstt-git-gui-v0.12.0-windows-x64-setup.exe: Windows installertt-git-gui-v0.12.0-windows-x64.zip: Windows, to unpack anywhere
What's changed
- One badge for a branch at its upstream. When a branch and its upstream
point at the same commit, the graph shows one badge with a 🔗, like
[main 🔗], instead of[main]and[origin/main]side by side. Once
either side moves on, the two badges come back on their own commits.
Graph - Merged branches still join in when merges are hidden. With merges hidden
(m), the commit made after a merge takes the merge's place in the drawing,
and the merged branch's lane curves into it, so you still see where each
branch came in. Graph - Faster startup on Linux in big repos. tt-git now watches each folder on
its own and skips the ones git ignores, so a repository with a large
node_modules/opens about as fast as one without, instead of staying blank
for several seconds before the first draw.
Refreshing
Full Changelog: v0.11.0...v0.12.0
v0.11.0
Install
Linux (x64, arm64) and macOS (Apple Silicon):
curl -fsSL https://github.com/ThirtyTech/tt-git/releases/download/v0.11.0/install.sh | TTGIT_VERSION=v0.11.0 shWindows (x64, arm64), in PowerShell:
$env:TTGIT_VERSION = 'v0.11.0'; irm https://github.com/ThirtyTech/tt-git/releases/download/v0.11.0/install.ps1 | iexDesktop app
The desktop app, tt-git-gui, is a separate download. Each one also carries tt-git.
On Linux, the install script puts it in ~/.local:
curl -fsSL https://github.com/ThirtyTech/tt-git/releases/download/v0.11.0/install-gui.sh | TTGIT_VERSION=v0.11.0 shtt-git-gui-v0.11.0-linux-arm64.AppImage: Linux AppImagett-git-gui-v0.11.0-linux-arm64.deb: Debian and Ubuntu:sudo apt install ./tt-git-gui-v0.11.0-linux-arm64.debtt-git-gui-v0.11.0-linux-arm64.pkg.tar.zst: Arch Linux:sudo pacman -U tt-git-gui-v0.11.0-linux-arm64.pkg.tar.zsttt-git-gui-v0.11.0-linux-arm64.rpm: Fedora, openSUSE:sudo dnf install ./tt-git-gui-v0.11.0-linux-arm64.rpmorsudo zypper install ./tt-git-gui-v0.11.0-linux-arm64.rpmtt-git-gui-v0.11.0-linux-arm64.tar.gz: Linux, to unpack into~/.localor/usr/localtt-git-gui-v0.11.0-linux-x64.AppImage: Linux AppImagett-git-gui-v0.11.0-linux-x64.deb: Debian and Ubuntu:sudo apt install ./tt-git-gui-v0.11.0-linux-x64.debtt-git-gui-v0.11.0-linux-x64.pkg.tar.zst: Arch Linux:sudo pacman -U tt-git-gui-v0.11.0-linux-x64.pkg.tar.zsttt-git-gui-v0.11.0-linux-x64.rpm: Fedora, openSUSE:sudo dnf install ./tt-git-gui-v0.11.0-linux-x64.rpmorsudo zypper install ./tt-git-gui-v0.11.0-linux-x64.rpmtt-git-gui-v0.11.0-linux-x64.tar.gz: Linux, to unpack into~/.localor/usr/localtt-git-gui-v0.11.0-macos-arm64.dmg: macOS (Apple Silicon): open it and drag tt-git to Applicationstt-git-gui-v0.11.0-windows-x64-setup.exe: Windows installertt-git-gui-v0.11.0-windows-x64.zip: Windows, to unpack anywhere
What's changed
- Copy the details text.
cin the details pane copies what it shows (a commit, a diff, plugin logs), or the selection when there is one; it's in the right-click menu too. In the desktop app, drag to select the text and copy it withctrl+c(cmd+con macOS).
Details · Selecting text - Plugin errors in the desktop app. Click a plugin's failure notice to open the plugin logs.
Plugin errors - One copy of the desktop app. Running
tt-git-gui <path>while the app is open hands the folder to the running copy, which opens or brings forward that repository's window.--new-instancestarts a separate copy.
One copy of the app tt-giton your PATH on Windows. The desktop app's installer putstt-git.exein abinfolder and adds it to your PATH, unless you untick Add tt-git to PATH.tt-git updateandinstall.ps1leave that copy to the desktop app's updates.
Install- Background fetch every minute. The default
[fetch] intervalis now 1 minute (3 minutes on battery), down from 5.
Background fetch - Fixed: the desktop app's taskbar badge stayed after the window that set it closed, and on Windows plugin event commands (such as the Azure DevOps plugin's refresh) flashed a console window on each background fetch.
Full Changelog: v0.10.0...v0.11.0
v0.10.0
Install
Linux (x64, arm64) and macOS (Apple Silicon):
curl -fsSL https://github.com/ThirtyTech/tt-git/releases/download/v0.10.0/install.sh | TTGIT_VERSION=v0.10.0 shWindows (x64, arm64), in PowerShell:
$env:TTGIT_VERSION = 'v0.10.0'; irm https://github.com/ThirtyTech/tt-git/releases/download/v0.10.0/install.ps1 | iexDesktop app
The desktop app, tt-git-gui, is a separate download. Each one also carries tt-git.
On Linux, the install script puts it in ~/.local:
curl -fsSL https://github.com/ThirtyTech/tt-git/releases/download/v0.10.0/install-gui.sh | TTGIT_VERSION=v0.10.0 shtt-git-gui-v0.10.0-linux-arm64.AppImage: Linux AppImagett-git-gui-v0.10.0-linux-arm64.deb: Debian and Ubuntu:sudo apt install ./tt-git-gui-v0.10.0-linux-arm64.debtt-git-gui-v0.10.0-linux-arm64.pkg.tar.zst: Arch Linux:sudo pacman -U tt-git-gui-v0.10.0-linux-arm64.pkg.tar.zsttt-git-gui-v0.10.0-linux-arm64.rpm: Fedora, openSUSE:sudo dnf install ./tt-git-gui-v0.10.0-linux-arm64.rpmorsudo zypper install ./tt-git-gui-v0.10.0-linux-arm64.rpmtt-git-gui-v0.10.0-linux-arm64.tar.gz: Linux, to unpack into~/.localor/usr/localtt-git-gui-v0.10.0-linux-x64.AppImage: Linux AppImagett-git-gui-v0.10.0-linux-x64.deb: Debian and Ubuntu:sudo apt install ./tt-git-gui-v0.10.0-linux-x64.debtt-git-gui-v0.10.0-linux-x64.pkg.tar.zst: Arch Linux:sudo pacman -U tt-git-gui-v0.10.0-linux-x64.pkg.tar.zsttt-git-gui-v0.10.0-linux-x64.rpm: Fedora, openSUSE:sudo dnf install ./tt-git-gui-v0.10.0-linux-x64.rpmorsudo zypper install ./tt-git-gui-v0.10.0-linux-x64.rpmtt-git-gui-v0.10.0-linux-x64.tar.gz: Linux, to unpack into~/.localor/usr/localtt-git-gui-v0.10.0-macos-arm64.dmg: macOS (Apple Silicon): open it and drag tt-git to Applicationstt-git-gui-v0.10.0-windows-x64-setup.exe: Windows installertt-git-gui-v0.10.0-windows-x64.zip: Windows, to unpack anywhere
What's changed
New
- Desktop app. tt-git now comes as a desktop app too,
tt-git-gui, with the same panes, keys and plugins as the terminal app in a window of its own. Installers for Windows, macOS (.dmg) and Linux (AppImage,.deb,.rpm, Arch package and a tarball) are on this release.
Desktop app- A native style with rounded cards and your system's UI font, or the terminal look (
[ui] style). Zoom withctrl+=/ctrl+-/ctrl+0, and pick a font from the menu or palette. - Checks for updates once a day and updates in place.
- Notifications for new commits while the window isn't focused, from a fetch or from another worktree or an agent, plus a badge on the taskbar, dock or Dock for new commits, conflicts or a stopped merge or rebase. Turn each alert on or off in the Notifications picker (
[ui.alerts]). - Windows: a jump list of recent repositories and git progress on the taskbar button. macOS: a Dock menu, Open in tt-git in Finder, and Quick Look previews of a file with
v/V. Linux: a launcher badge and a file manager entry.
Install · Using it
- A native style with rounded cards and your system's UI font, or the terminal look (
- Background fetch. While a repository is open, tt-git fetches every remote every 5 minutes, quietly, without asking for a password. It fetches less on battery and not at all in battery saver or on a metered connection. Set it with
[fetch] intervalandconserve.
Background fetch - Push a branch without checking it out.
Pin the branches pane pushes the selected branch, setting its upstream on the first push. If the current branch has commits to push too, it asks which one.
Pushing a branch - Hide merge commits.
min the graph hides and shows merge commits.
Graph - About. The help popup has an About tab with the version and links.
Navigation
Changed
- Checking out a branch another worktree has opens that worktree instead of failing.
Worktrees - Zooming status with
+now shows status as a full-height column with the graph beside it.
Status - The branches filter deletes the word before the cursor with
ctrl+w. - On Windows,
tt-git.exehas the app icon and fills in the Details tab of its Properties.
Fixed
tt-git updateon Windows no longer fails when PowerShell 7's module path is set.
Full Changelog: v0.9.0...v0.10.0
v0.9.0
Install
Linux (x64, arm64) and macOS (Apple Silicon):
curl -fsSL https://github.com/ThirtyTech/tt-git/releases/download/v0.9.0/install.sh | TTGIT_VERSION=v0.9.0 shWindows (x64, arm64), in PowerShell:
$env:TTGIT_VERSION = 'v0.9.0'; irm https://github.com/ThirtyTech/tt-git/releases/download/v0.9.0/install.ps1 | iexWhat's changed
New
- Reset. Press
Xin the graph or the branches pane to reset the current
branch to a commit or branch, choosing soft, mixed or hard. A hard reset asks
again and says which uncommitted changes are lost and how many commits leave
the branch. Undo (z) takes it back the same way.
Reset - Folder tree in Status. Press
`to switch between the flat list and a
tree grouped by folder. Your choice is saved asstatus.tree.Enterfolds a
folder, and-and=fold or open them all.Space,dandion a
folder stage or unstage, discard or ignore everything under it, and details
shows the folder's diff.
Status - Ask an agent about a hunk.
Ain the staging view sends the selected hunk
or lines to your agent. In details,Asends the hunk at the top of the diff.
You can set the prompt with[agent] hunk_prompt, and actions with
when = "hunk"(Explain change, Review change) are offered there.
Agents - Search the whole message or the diff.
ctrl+tin the graph's/prompt
switches what the regex searches: the subject, the whole commit message, or
the lines each commit adds or removes (git log -G). The graph's title shows
which.
Graph - Search in details.
/searches the commit, stash or diff shown in
details, jumping to matches as you type.nandNstep through the
matches. In the files view they go on to the next or previous file with a
match.
Details - Per-repository config. A repository can lay its own settings over your
globalconfig.toml, from.tt-git.tomlin the working tree (committed) or
tt-git.tomlin the git dir (local, shared by worktrees).
tt-git config pathlists the files that apply.
Configuration - Page details from the graph.
shift+pageupandshift+pagedownscroll
the details pane without leaving the graph.
Changed
/presets from your repo. Whengraph.message_presetsis unset (now the
default),tabin the/prompt steps through the 8 subject prefixes
(feat:,fix(scope):…) used most in recent commits. A dotted rule
separates them from the input.
Full Changelog: v0.8.1...v0.9.0
v0.8.1
Install
Linux (x64, arm64) and macOS (Apple Silicon):
curl -fsSL https://github.com/ThirtyTech/tt-git/releases/download/v0.8.1/install.sh | TTGIT_VERSION=v0.8.1 shWindows (x64, arm64), in PowerShell:
$env:TTGIT_VERSION = 'v0.8.1'; irm https://github.com/ThirtyTech/tt-git/releases/download/v0.8.1/install.ps1 | iexWhat's changed
- Merges stay dimmed in a filtered graph. Merge commits stay dimmed
while you filter the graph by message (/) or author. Reverting a merge
from a filtered graph now asks which side to keep, and cherry-picking a
range there refuses one that includes a merge, the same as in the
unfiltered graph.
Graph
Full Changelog: v0.8.0...v0.8.1
v0.8.0
Install
Linux (x64, arm64) and macOS (Apple Silicon):
curl -fsSL https://github.com/ThirtyTech/tt-git/releases/download/v0.8.0/install.sh | TTGIT_VERSION=v0.8.0 shWindows (x64, arm64), in PowerShell:
$env:TTGIT_VERSION = 'v0.8.0'; irm https://github.com/ThirtyTech/tt-git/releases/download/v0.8.0/install.ps1 | iexWhat's changed
- Filter the graph by message. Press
/in the graph to filter commits by a
regex on the subject, alongside the author and path filters. It ignores case
unless the pattern has a capital.tabandshift+tabstep through the
presets ingraph.message_presets(^feat,^fix,^docsand so on).
Graph - Delete gone branches. Press
Din the Branches pane to fetch with
--pruneand delete the local branches whose upstream was deleted on the
remote. It asks first, keeps branches checked out in any worktree, and offers
unmerged ones again with a second confirm beforegit branch -D.
Branches - Step through commits in details.
[and]show the newer or older
commit without leaving details, moving the graph's selection and keeping the
files view and fullscreen. On a stash they step through the Stash tab. The
help bar now shows page down and page up.
Details - Step through status files. On a working-tree file's diff and in the
staging view,[and]move to the previous or next file in the status pane.
Staging ctrl+win prompts. Deletes the word before the cursor in any text
prompt, such as the message filter, new branch or commit.
Full Changelog: v0.7.0...v0.8.0
v0.7.0
Install
Linux (x64, arm64) and macOS (Apple Silicon):
curl -fsSL https://github.com/ThirtyTech/tt-git/releases/download/v0.7.0/install.sh | TTGIT_VERSION=v0.7.0 shWindows (x64, arm64), in PowerShell:
$env:TTGIT_VERSION = 'v0.7.0'; irm https://github.com/ThirtyTech/tt-git/releases/download/v0.7.0/install.ps1 | iexWhat's changed
- Filter to the current folder. Started from a subfolder of a monorepo, press
.in Graph or Status to show only the commits and changes inside that folder; press it again orescto clear it. The title shows the filter (folder apps/web/), and the folder is also listed first in theffilter's File tab. Setgraph.filter_to_cwdto start filtered, or use--filter-to-cwd/--no-filter-to-cwdfor one run.- While Status is narrowed,
a,Dandsact only on the folder. Commit still takes everything staged, so the title warns when staged changes sit outside it.
Graph
- While Status is narrowed,
Full Changelog: v0.6.0...v0.7.0
v0.6.0
Install
Linux (x64, arm64) and macOS (Apple Silicon):
curl -fsSL https://github.com/ThirtyTech/tt-git/releases/download/v0.6.0/install.sh | TTGIT_VERSION=v0.6.0 shWindows (x64, arm64), in PowerShell:
$env:TTGIT_VERSION = 'v0.6.0'; irm https://github.com/ThirtyTech/tt-git/releases/download/v0.6.0/install.ps1 | iexWhat's changed
New
- Revert a commit. Press
Ron a commit in the graph to revert it, after a confirmation. For a merge commit you choose which parent's side to keep. A conflict stops the revert, and you continue or abort it from the status pane.
Graph - Cherry-pick a range. In the graph,
vstarts a range at the selected commit and moving extends it.Cthen applies every commit in the range, oldest first. A range that contains a merge commit is refused.
Graph - Conflicts with the base branch. Branches and worktrees that would conflict with the base branch get a
✗nmark (n is the number of conflicting files), and the bottom border names the files for the selected row. The check runs in the background and doesn't touch the repository. It needs git 2.40, andbranches.check_merges = falseturns it off.
Branches - Fast-forward without checking out. Press
Fin the branches pane to move a local branch to its upstream without switching to it. It refuses, with a message, for the checked-out branch, a branch with no upstream, a branch that's ahead or has diverged, and a branch checked out in another worktree.
Branches - Discard everything.
Din the status pane opens a dialog where you choose what to throw away: everything, unstaged changes, unstaged changes plus untracked files, or untracked files only. It shows what will be lost and what's kept first.
Status - Ignore a file.
iin the status pane adds the selected file, or its folder, to.gitignoreor.git/info/exclude. If the path is tracked, it asks first and then untracks it.
Status - Hide the graph lanes.
Ltoggles the branch lanes in the graph, andgraph.lanessets the default.
Graph - New plugin events.
revert.completedandbranch.fast_forwardedare new, andcherry_pick.completednow has acommitsarray.
Events
Fixed
- Worktrees changed outside tt-git. The worktree list now updates by itself when you add, remove, move, lock or prune a worktree in a shell. Before, you had to press
ctrl+r. tt-git opened in a linked worktree also picks up branch and worktree changes made from the main one.
Worktrees
Full Changelog: v0.5.0...v0.6.0
GitHub plugin v0.1.0
Install with: tt-git plugin install ThirtyTech/tt-git/plugins/github
What's changed
- First release. Shows each branch's open GitHub pull request number in the branch list, and opens a branch's pull request in your browser. It works with github.com and GitHub Enterprise Server, and takes its token from
gh auth token,GH_TOKENorGITHUB_TOKEN. Needs tt-git 0.4.0 or later.
GitHub plugin
v0.5.0
Install
Linux (x64, arm64) and macOS (Apple Silicon):
curl -fsSL https://github.com/ThirtyTech/tt-git/releases/download/v0.5.0/install.sh | TTGIT_VERSION=v0.5.0 shWindows (x64, arm64), in PowerShell:
$env:TTGIT_VERSION = 'v0.5.0'; irm https://github.com/ThirtyTech/tt-git/releases/download/v0.5.0/install.ps1 | iexWhat's changed
- Color themes. Sixteen built-in themes, such as Catppuccin, Dracula,
Gruvbox, Nord and Tokyo Night. Your own go in<config>/themes, in
Omarchy'scolors.tomlformat. Pick one with the Theme command in the
palette. It previews each theme as you move through the list and saves the
one you pick.theme = "omarchy"follows Omarchy's current theme and
switches live when it changes, andtheme_background = truepaints the
theme's background.
Themes - Agent actions. Press
Ain the graph to ask an AI agent about the
selected commit. Type a request, or tab through ready-made actions:
resolve conflicts, explain commit, explain branch and review commit. The
agent (claudeby default) starts in a new herdr tab when tt-git runs
inside herdr, or in place of the details pane otherwise. You can configure
the command and add actions under[agent].
Agent actions - Blame shows whether it's the latest. The title ends with
latest,
3 newer commitsornot on HEAD. That way you can see how far back you've
stepped. Blame - Commit counts on worktrees. Each worktree row shows
↑2for commits it
has that the base branch doesn't.
Worktrees - Branch tabs from the graph. With the graph focused,
]and[(or}
and{) step the branches pane's tabs, and focus stays on the graph.
Graph - Windows updates with tt-git running.
tt-git updateand the installer
now work while other copies of tt-git are still running, even across
several updates.
Install
Full Changelog: v0.4.0...v0.5.0