Git Ride
A VS Code extension for working with git history: a Git Log window in the bottom panel of the
editor, a sidebar panel with the working tree, stashes and comparisons, and a three-pane conflict
resolver.
Features
Ref tree. Local, Remote and Tags, grouped into folders by name (feature/…), favourite
branches pinned in their own block at the top of a group, the current branch and how far it has
drifted from its upstream. Fetch, Expand All and Collapse All sit above the tree.
Commit list. Streamed in pages of 200 records up to a ceiling of 10,000, more loaded as you
scroll, draggable author and date columns. A commit graph is drawn inside the rows: hovering lights
up a straight stretch of history, and a click hides it behind a dashed line. View options in the
list header shows or hides the graph, the author, the short hash and the date; the graph steps aside
while a filter narrows the history.
Filters. Ref selection (one branch, several of them, or a from..to range), message search,
authors, date (last 24 hours, last week, last month, a custom range) and path. Authors and dates
open in pop-ups, and the × next to a filter clears it. A search that reads as a hash also resolves
it, and the commit it names becomes the first row of the list even when nothing else matched.
Filters and selection survive a window reload.
Details pane. The author, both dates — Authored and Committed — the full hash, the commit
message and a tree of changed files; a double click opens the diff in the built-in comparison
window. The ref tree and the details pane collapse to a narrow rail and come back at their old
width.
History tabs. Show History in the Git Ride submenu of the editor and explorer context menus
opens the history of a file or folder as a tab next to Log, built from the current branch; renames
are not followed. Show History for Selection does the same for the selected lines and follows
them as they move and as the file is renamed. Clicking a commit on a history tab opens the diff of
the file at that commit, or updates the one already open.
Actions. The commit context menu — Checkout Revision, New Branch from Here, New Tag, Cherry-Pick,
Revert Commit, Undo Commit, Reset Current Branch to Here, Compare with Local, and copying the hash
or the message. The ref context menu — Checkout, New Branch from, Compare with Current, Show Diff
with Working Tree, Merge, Update, Push, Rename, Delete, and copying the name. An entry that does not
apply to the row is not shown; Cherry-Pick and Revert Commit stay visible but greyed out on a merge
commit, since git needs to be told which parent to take. New Branch from Here and New Branch
from open pre-filled with the name of the current branch and a Checkout branch toggle, ticked
by default; a name already taken by another branch is flagged as you type.
Operations that local changes would get in the way of offer to stash them and bring them back
afterwards, and an unfinished merge or revert is recognised before the command runs.
Git Ride panel. A sidebar panel with three tabs — Changes, Stash and Compare — under
one repository selector, with a switch between a directory tree and a flat list of full paths. Files
carry the icons of the active icon theme and are coloured by status. While a merge, cherry-pick,
revert or rebase is unfinished, a strip above the tabs says so and offers Abort.
Changes. The working tree with checkboxes, a message box, an Amend toggle, and the
Commit and Commit and Push buttons. A checkbox means goes into the commit, not staged:
no git command runs when you tick one, and the index is touched once — at the moment you commit.
During a merge or a cherry-pick the checkboxes are frozen and the commit takes every change, since
git refuses a partial commit there. Untracked files live under Unversioned Files, and Add
to VCS or a drag to Changes puts them under version control. Conflicting files live under
Merge Conflicts. The row menu offers Show Diff, Jump to Source, Open in System Folder,
Rollback…, Copy Path and Delete…. Rollback takes a file, a directory or a whole group back to
HEAD, exactly as far as the row shows: a directory under Changes leaves its unversioned files
alone. Nothing under Merge Conflicts can be rolled back or deleted.
Stash. Entries expand in place to show their files, with the file count and the branch of each
entry. Unstash applies an entry and keeps it, Pop applies and removes it, Drop… removes
it. Stash Changes… in the Git Ride submenu of the editor and explorer stashes tracked changes;
untracked files stay on disk.
Compare. The difference between the selected ref or commit and the working tree. The target
comes from Git Log — Show Diff with Working Tree on a ref, Compare with Local on a commit.
A double click opens the file in the built-in comparison window.
Conflict resolver. A double click on a file under Merge Conflicts opens the merge editor
built into VS Code or, with gitride.conflictEditor set to gitride, the Git Ride resolver: our
side on the left, their side on the right, and the result in the middle, seeded with the automatic
merge. Each change can be taken into the result or dismissed, all non-conflicting changes can be
applied at once, and every step is undone with Ctrl+Z. The panes are highlighted like the editor,
and the problems found in the result are underlined, with a count in the header of the middle pane.
The result is written to the file and staged.
Console. Every git call is written to the Git Ride output channel: the run number, the
whole command line, stderr line by line and the exit code. stdout is not written — that would be
megabytes of history.
Requirements
- VS Code 1.130 or newer
git 2.25 or newer — the Changes tab passes path lists on standard input
(--pathspec-from-file), which older versions do not understand
git on PATH, or the path given by the git.path setting
- the built-in
vscode.git extension enabled — workspace repositories are discovered through it,
submodules and linked worktrees included
Installation
From the Marketplace: open the Extensions view, search for Git Ride and press Install.
From a .vsix file: open the Extensions view, choose Install from VSIX… in the … menu and
pick the file. The same thing from a terminal:
code --install-extension git-ride-0.0.3.vsix
Usage
The Git Log window lives in the bottom panel and the Git Ride panel in the activity bar; both open
from the command palette.
| Command |
What it does |
Git Ride: Show Git Log |
Open the Git Log window |
Git Ride: Show Panel |
Open the Git Ride panel |
Git Ride: Refresh |
Refresh the open tab of the Git Ride panel |
Git Ride: Show Console |
Show the log of git calls |
Stash Changes…, Show History and Show History for Selection are in the Git Ride submenu
of the editor and explorer context menus.
Settings:
| Key |
Default |
What it does |
gitride.autofetch |
true |
One fetch per repository, the first time the window shows it in a session. It never prompts for credentials, and a command that writes to that repository interrupts it |
gitride.notifications |
all |
How loud the outcome of an action is: all, important (network and destructive commands only) or errors (failures only) |
gitride.showFileStatus |
false |
The status letter (A, M, D, R, T) on the rows of the Compare and Stash tabs |
gitride.lineHistoryDiff |
file |
What the diff of a commit shows on a Show History for Selection tab: file — the whole file scrolled to the lines, lines — just the lines |
gitride.conflictEditor |
vscode |
What a double click on a conflicting file opens: vscode — the built-in merge editor, gitride — the Git Ride resolver |
gitride.resolver.scrollSpeed |
0.5 |
How far the mouse wheel scrolls the panes of the resolver, from 0.1 to 1 |
Keys: / moves the focus into the search field, and Escape sends it back to the list without
clearing what was typed. Ctrl+C copies the selected commit row or file path. Delete deletes the
selected file on the Changes tab and drops the selected entry on the Stash tab. In the resolver,
Alt+Up and Alt+Down move between changes.
Privacy
Git Ride works entirely on your machine. It has no telemetry, no accounts and no service of its
own to talk to. The only program it runs is git, and the only traffic it can cause is the
traffic git itself makes when you fetch or push.
License
Proprietary. The full text ships with the extension as LICENSE.txt and is linked from the
License tab of the Marketplace page.