https://github.com/aganzha/stage
Stage - Git GUI client for linux desktops inspired by Magit
https://github.com/aganzha/stage
developer-tools flatpak git gtk-rs gtk4 gui-application libadwaita
Last synced: 3 months ago
JSON representation
Stage - Git GUI client for linux desktops inspired by Magit
- Host: GitHub
- URL: https://github.com/aganzha/stage
- Owner: aganzha
- License: gpl-3.0
- Created: 2023-12-09T04:38:58.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2024-10-24T04:46:44.000Z (over 1 year ago)
- Last Synced: 2024-10-24T12:25:36.654Z (over 1 year ago)
- Topics: developer-tools, flatpak, git, gtk-rs, gtk4, gui-application, libadwaita
- Language: Rust
- Homepage: https://gihub.com/aganzha/stage
- Size: 2.17 MB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
Stage -
Git GUI client for linux desktops inspired by Magit

[](https://www.gnu.org/licenses/gpl-3.0)
[](https://copr.fedorainfracloud.org/coprs/aganzha/stage/package/stage-git-gui/)
[](https://launchpad.net/~aganzha/+archive/ubuntu/stage)
[](https://aganzha.github.io/stage/)
## Installing
### Flatpak
Add [Flathub](https://flathub.org/apps/io.github.aganzha.Stage) to your remotes
```sh
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
flatpak install flathub io.github.aganzha.Stage
flatpak run io.github.aganzha.Stage
```
### Fedora 42
```sh
sudo dnf install copr
sudo dnf copr enable aganzha/stage
sudo dnf install stage-git-gui
stage-git-gui
```
### Ubuntu 25.04
```sh
sudo add-apt-repository ppa:aganzha/stage
sudo apt update
sudo apt install stage-git-gui
stage-git-gui
```
## Using
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.
> [!NOTE]
> 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.
- Use `Ctrl +` / `Ctrl -` to change font size.
- dark / light theme switcher is in the burger

### Main commands
- `s` - **S**tage selected files or hunks or all changes by pressing `enter`.
- `u` - **U**nstage. Button -
- `k` - **K**ill
- `Tab/Space` - Expand/collapse underlying files and hunks.
> [!NOTE]
> Stage operates on files and hunks as native git. You can expand/collapse files and hunks to view changes and choose hunks for commit.
+ When cursor is on file name, **whole file** is a subject to issued command.
+ When cursor is on hunk header or any line inside hunk, then **current hunk** is subject to command
> [!NOTE]
> Current hunk under cursor is slightly highlighted.
### Commit/Push/Pull
- `c` - **C**ommit. Button in headerbar -
- `f` - Pull (as in **F**etch). Button -
- `p` - **P**ush. Button - 
### Command showing other windows
- `b` - Branches window
- `l` - opens log window
- `z` - opens stashes panel
- `t` - opens tags window
### Other Commands
- `o` - opens quick repo selector
- `Ctrl` + `o` - opens repo choosing dialog
- `Ctrl` + `b` - blame line under cursor
> [!NOTE]
> 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.
> [!TIP]
> 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
> [!WARNING]
> 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.
> [!NOTE]
> 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 `s`tage 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 **L**og) 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.
> [!TIP]
> 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.
> [!NOTE]
> 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.
- Hit `a` (as in **A**pply) to Cherry-pick commit onto current branch
- Hit `r` (as in **R**evert) to Revert commit onto current branch
### 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 `c` - create, `k` - delete (as in **K**ill) and `p` - to push tags to remote.
### Blame
Git blame in Stage is a bit strange :smiley: 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 :smiley:. 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.