Stage

Stage is GTK4 git client inspired by Magit. Pretends to be Magit without Emacs.
View source code on Github

Installation

Flatpak - is the proper way to install Stage on your linux desktop. Further commands are for terminal.

Add Flathub to flatpak remotes

flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
flatpak install flathub io.github.aganzha.Stage
flatpak run flathub io.github.aganzha.Stage

Update
flatpak update io.github.aganzha.Stage

Fedora 42

sudo dnf install copr
sudo dnf copr enable aganzha/stage
sudo dnf install stage-git-gui
stage-git-gui

Ubuntu 25.04

sudo add-apt-repository ppa:aganzha/stage
sudo apt update
sudo apt install stage-git-gui
stage-git-gui

Usage

Main screen - Status window

Open repository either by clicking placeholder button, or repository list button in the header bar. Stage, then, will live track all changes you do on files inside repository and display in Status window in form of text diff.

Highlighted line in Status window behave like a cursor in TUI apps.

Move cursor around with arrows or by mouse clicking in any area. Commands your issued for Stage are applied to "thing" under cursor. E.g. to stage (git add) file put cursor on file name and press s, or click in header bar. Whole file will be added to staging area for further commit.

Main commands

Stage operates on files and hunks as native git. You can expand/collapse files and hunks to view changes and choose hunks for commit.
Current hunk under cursor is slightly highlighted.

Commit/Push/Pull

Other commands

Command for displaying additional windows

Any window above Status window could be closed with Esc or Ctrl-w

Branches window

Current branch is marked with icon

Switching, creating and deleting branches

This window allows quickly switch between branches: just move cursor with arrows and hit enter, or double click.

To create new branch hit c or button.

Important! The branch you are creating will be based on the branch on which the cursor currently is. This means you can create new branch from branch feature even though the current branch is master, and quickly switch to it.

To delete branch hit k or button.

Important! There are no any confirmation for branch deleting.

Merge and rebase

Put cursor on branch you want to merge in current () branch and hit m (). Use r () for rebase.

Sooner or later you will have conflicts during merge/rebase. When Stage displays conflicts it behaves a bit differently: when cursor is on ours or theirs side of conflict, whole side is highlighted and hitting stage will resolve this conflict. Conflict will disapear from Conflicts section. Sometimes you will see final result in Staged section, but it could not be the case if after resolving there are no changes in source code (e.g. you choose ours side and source code remains the same).

View branch commits

Hit l (as in Log) to view commits in branch under cursor in Log window.

Remotes

Remote branches are just separate section in branches list and their behaviour and commands are just the same as local branches. E.g. just hit enter or double click on remote branch and Stage will fetch it and switch to it.

To update remote branches hit u or press button in headerbar.

You can manage remotes in Status window by pressing button.

Log window

When in main Status window or in Branches window hitting l () will bring up Log window.

Important Stage does not display merge commits.

Log window is just a list of commits. You can search among them via panel in headerbar. Commits which come from other branches displaying arrows in separate column for convinience.

Commits window

Hitting enter or single click on commit sha in Log window brings up the commit content window. Individual Commit window behaves same way as Status window, except its readonly.

Stashes panel

Hitting z or icon will open stashes panel. Hitting z one more time will stash all changes.

Tags window

Hitting t in Status window brings up Tags window. That window behave as a simple list where you can create, k delete (as in Kill) and p push tags to remote.

Blame

Git blame in Stage is a bit strange :) Stage do not want to read your files directly. It only operates on diffs produced by libgit2. So, to view history of some line in code this line must somehow apear in Stage. This means you have to edit or delete this line :) Or line nearby (each change in git surrounded by 3 lines of context above and below). When you see your line in Stage you can put cursor on it and hit Ctrl+b. This will open up commit window pointing this line origin. Again, this works in Commit window to: hitting any line (except green one) in Commit window will bring another window with commit which contains this line adding.