Gitwise
See who changed every line, when and why, right where you're reading the code, your whole history in a commit graph, a rebase screen you can drag, and your Bitbucket pull requests grouped by what to do next. Free on private repositories, with no account. Gitwise runs the git already on your machine, and sends nothing anywhere unless you connect Jira or Bitbucket, and then only to them.
What you get
Who changed this line. The author, age and commit message appear at the end of the current line. Lines you've edited read Not committed yet, and the rest keep their owner while you type.
Details on hover. Hover over that text for the full message and links to open the changes, see the line's history, copy the commit id or blame the whole file.
CodeLens. The latest change and the number of authors, above the file and each of its functions and classes.
Whole-file blame. Alt+B adds a column with each block's commit and age, with a colour stripe from recent (coral) to old (blue). Esc clears it.
Heatmap. Gitwise: Toggle Heatmap colours the left edge of each line by age, and the scrollbar too, so you can see at a glance where a file is changing.
File history and line history. Two views under Source Control. File History follows the file you're in, through renames. Line History (right-click a selection) lists only the commits that changed those lines, like git log -L. Click a commit to see its changes.
Step through a file's past. Alt+, and Alt+. move to older and newer revisions as diffs, across renames, and back to your working copy. Blame works on old revisions too.
Commit graph. Gitwise: Commit Graph, or the button at the top of Source Control. Every branch and tag with its lanes, and a row for uncommitted changes. It updates by itself when something changes, including commits from another terminal.
- Search with words, or
author: message: file: sha: type:merge after: before:. Matches stay lit and the rest dim; Enter steps through them.
- A commit's details: its message, author, parents and files, with the lines each file added and removed. A file opens its diff beside the graph.
- Change things from the details or by right-clicking a row: cherry-pick, revert, reset (soft, mixed or hard), branch, tag, check out. Right-click a branch to switch to it or merge it. A conflict tells you so and offers Abort, and a hard reset always asks first and says what would be lost.
- Compare any two branches, tags or commits: the commits only on each side, and the files that differ, either between the two tips or only what one changed since they split.
- Contributors: commits per person. Pick someone to search their commits.
- Worktrees: a second working folder on another branch. Make one from any commit, open it in a new window, or remove it. Removing one with uncommitted work warns you first.
Interactive rebase. Pick Edit later commits on a commit in the graph, or run Gitwise: Interactive Rebase. Keep, reword, squash, fixup or drop each commit (P R S F D), and drag or Alt+arrows to reorder. It warns you when commits are already on a remote or when a reorder is likely to conflict. Real git does the work, so a conflict stops it the usual way: fix it in Source Control, then Continue, Skip commit or Abort from the banner on the graph.
git rebase -i in any terminal. Run Gitwise: Use the Rebase Screen for git rebase -i and git opens this same screen. It sets sequence.editor in your global git config, after asking. Run it again to turn it off.
Clickable commits in the terminal. Commit ids in VS Code's terminal open in the graph, and a..b ranges open in Compare.
Jira and Bitbucket. Commits link to the Jira issues and pull requests they mention, in the graph's details and in hovers. Open on Bitbucket works from the remote alone. Run Gitwise: Connect Jira or Gitwise: Connect Bitbucket to link Jira keys and see titles and states. Both work with Cloud and Data Center. Tokens stay in VS Code's secret storage, and requests go straight from your machine to the site you named. Nothing is sent until you connect.
Pull Requests. A view under Source Control lists your Bitbucket pull requests by what to do next: Needs your review, Needs your changes (conflicts, a failed build, changes requested, open tasks), Ready to merge, Waiting on others and Drafts. Click one to open it, or check out its branch from the row. On Cloud it covers the repositories open in the window, and on Data Center every repository you're involved in.
Keys
| Key |
Does |
Alt+B (Mac Ctrl+Alt+B) |
Toggle file blame |
Esc |
Clear the file blame or heatmap |
Alt+, (Mac Ctrl+Alt+,) |
Older revision of this file |
Alt+. (Mac Ctrl+Alt+.) |
Newer revision of this file |
Every command is in the Command Palette under Gitwise.
Settings
| Setting |
Default |
Does |
gitwise.currentLine.enabled |
on |
Who changed the current line, at its end |
gitwise.statusBar.enabled |
on |
The same in the status bar, hidden while VS Code's own (git.blame.statusBarItem.enabled) is on |
gitwise.codeLens.enabled |
on |
Latest change and authors above the file and its functions |
gitwise.blame.detectMoves |
on |
Credit moved or copied lines to whoever first wrote them (git blame -M -C). Turn off if blame is slow on a very large history |
gitwise.blame.ignoreWhitespace |
off |
Ignore whitespace-only changes (git blame -w) |
gitwise.heatmap.coldDays |
90 |
Days after which a line counts as cold |
Colours can be changed through workbench.colorCustomizations (gitwise.heat0 to gitwise.heat4, gitwise.heatNew, gitwise.currentLineForeground, gitwise.blameForeground, gitwise.blameBackground).
Good to know
- Every git command Gitwise runs is listed with its timing under View → Output → Gitwise.
- It needs git installed and only works on files on this machine, so not in vscode.dev.
- It's off in Restricted Mode: a repository's config can make git run programs, so Gitwise waits until you trust the folder.
- The note sits at the end of the line, so on a very long line it's off to the side or, when wrapped, further down. The hover and the status bar still work there.
- The graph loads the newest 2,000 commits, with a button for more; Contributors and search see what's loaded.
- The rebase screen takes one line of history (no merges in the range) and up to 300 commits. Force-pushing afterwards is yours to do.
- If you continue a rebase from a terminal instead of the graph, git asks for any remaining messages in your usual editor.
- Files over 20,000 lines get no blame.
- A file not stored as UTF-8 can show its lines as not committed.