Scripts2026年4月14日·1 分钟阅读

GitUI — Blazing-Fast Terminal UI for Git Written in Rust

GitUI brings a Rust-fast terminal interface to Git: browse commits, stage hunks, view diffs, manage branches, and resolve conflicts — all without leaving the keyboard. A great complement (or alternative) to lazygit.

Introduction

GitUI is a Rust-powered terminal interface for Git, built around a single design goal: feel instant. Its libgit2 backend makes operations like "status on a 100K-file repo" finish in milliseconds, and all features are keyboard-driven.

With over 22,000 GitHub stars, GitUI is lazygit's main rival. Both are excellent; GitUI is faster on large repos and has a cleaner default layout, while lazygit has a slightly richer feature set and a larger community.

What GitUI Does

GitUI offers tabs for Status, Log, Files, Stashing, and Stash operations. Each tab is keyboard-navigable with hjkl or arrows. You can stage/unstage hunks with Enter, commit with c, push/pull with P/p, branch, rebase, and inspect history — all without typing git once.

Architecture Overview

[GitUI (Rust + tui-rs)]
      |
[libgit2 — fast Git backend]
      |
  +-----+-----+-----+-----+
  |     |     |     |     |
Status Log  Files Branch Stash
hunks  graph tree         rename/apply
      |
[Keybinds]
   Vim-style navigation
   global "1-5" to jump tabs
   "?" shows context help
      |
[Config]
  ~/.config/gitui/
  theme.ron, key_bindings.ron

Self-Hosting & Configuration

# Quick reference keybinds (press ? inside gitui)
# 1  Status   (stage/unstage/commit)
# 2  Log      (browse + reset/checkout)
# 3  Files    (explore + open)
# 4  Stashing
# 5  Stashes  (apply/pop/drop)

# e  edit in $GIT_EDITOR
# c  commit
# P  push
# p  pull
# b  branches
# t  tags
# s  switch branch
// ~/.config/gitui/theme.ron — Catppuccin-ish colors
(
    selection_bg: Some(Rgb(69, 71, 90)),
    selection_fg: Some(Rgb(205, 214, 244)),
    cmdbar_bg:    Some(Rgb(30, 30, 46)),
    cmdbar_extra_lines_bg: Some(Rgb(30, 30, 46)),
    branch_fg:    Some(Rgb(245, 194, 231)),
    diff_line_add:    Some(Rgb(166, 227, 161)),
    diff_line_delete: Some(Rgb(243, 139, 168)),
)

Key Features

  • Instant on large repos — libgit2 native, no Git CLI subprocess
  • Stage/unstage hunks — line-level granularity with Enter
  • Interactive rebase support — reorder / squash / edit commits via TUI
  • Stash management — create, apply, pop, drop stashes visually
  • Branch + tag management — create, rename, delete, checkout, merge
  • Blame + file history — inspect who changed what when
  • Custom keymaps + themes — RON-format config files
  • GPG signing support — respects your Git config

Comparison with Similar Tools

Feature gitui lazygit tig gh dash git-gui
Language Rust Go C Go Tcl/Tk
Backend libgit2 git CLI libgit2 git CLI git CLI
Speed on large repos Best Fast Fast Fast Slow
Feature breadth Good Best Good (read-only focus) Limited (GitHub-focused) Basic
Community size Growing Largest Established GitHub-specific Legacy
Best For Speed-first terminal UI Feature-rich TUI Log/diff browsing GitHub PRs Legacy GUI

FAQ

Q: GitUI vs lazygit? A: Both excellent. lazygit has more features and bigger community. GitUI is faster on large repos and cleaner UI. Try both, pick the one that fits your muscle memory.

Q: Does GitUI work over SSH? A: Yes — it's a TUI, so run it in any terminal including SSH sessions. Install gitui on the remote or on your local machine against a mounted remote repo.

Q: Can it handle merge conflicts? A: Yes, the Status tab marks conflicted files; press e to open your editor to resolve, then stage with s. For complex conflicts, many users still switch to a GUI.

Q: Does it support submodules / worktrees? A: Yes — worktrees and submodule status show in the UI. Advanced operations still require the git CLI.

Sources

讨论

登录后参与讨论。
还没有评论,来写第一条吧。

相关资产