Repository navigation
Releases
Releases · VictorQuilgars/git-vertex
v1.42.0
Added
- A review by the model before the pull request is opened. In a comparison of two branches, Review with AI has the model read the diff and comment as a reviewer would — risks such as an error now swallowed or a behaviour changed without a test, and leftovers such as debug output or a TODO added. Each comment sits under the line it is about, in the model's colour, and can be dismissed; a comment about a file as a whole sits under its name. Nothing is sent until you ask, and nothing is posted anywhere. When the diff is too large to send whole, the review says which files it read only in part and which it did not read. The model, its instructions and how much of the diff it reads are set under Settings › AI Assistant › Review before the pull request. (#265)
- Restore several files of a commit at once. A file's menu in a commit's file list offers Restore All N Files of This Commit…, or, with a filter typed, Restore the N Files Shown…, beside the single-file restore. A file the commit deleted is left out — it has no version there to put back. As with one file, it asks first, and the result lands as pending changes you can read before keeping them. (#69)
- The Overview shows the work in every worktree. Below the card of the branch on screen, a card for each branch checked out in another worktree says where it is, how it stands against its upstream, whether it has uncommitted changes, and its pull request; a click shows its tip in the graph, a double-click opens that worktree. A right-click on any card, the current one included, opens the branch's own menu. RECENT walks back a page at a time — past a month, to a quarter, a year, then everything — and Show older appears whenever there is older work, not only when the list is empty. (#279)
- Write / Preview on every markdown field of GitHub. The comment box and the description editor of an issue or a pull request, and the body of the pull request and issue composers, gain a Preview tab that draws the draft with the renderer the posted text is read with. The field is only hidden while you look, so the caret and the undo history are where you left them, and a field emptied by posting is back on Write. (#337)
- Squash several commits into one, from the graph. Select a run of commits with shift-click or ctrl/cmd-click, right-click it, and Squash N Commits into One… opens the interactive rebase with the plan already made — the oldest picked, the others squashed into it, git's combined message ready to edit. Nothing is rewritten until you launch it there. A selection that cannot be folded keeps the row, disabled, saying why: commits with a gap between them, on another branch than the checked-out one, down to the first commit, or with a merge the rebase would flatten. (#69)
Fixed
- The toolbar leaves its compact layout when the window widens, every time. It listened only to the media query's change event, which a window that produces no frame can hold back while the width has already moved; it now re-reads the query on every resize too. (#245)
Git Vertex VS Code Extension v1.40.0
Git Vertex VS Code Extension v1.40.0
Added
- A review by the model before the pull request is opened. In a comparison of two branches, Review with AI has the model read the diff and comment as a reviewer would — risks such as an error now swallowed or a behaviour changed without a test, and leftovers such as debug output or a TODO added. Each comment sits under the line it is about, in the model's colour, and can be dismissed; a comment about a file as a whole sits under its name. Nothing is sent until you ask, and nothing is posted anywhere. When the diff is too large to send whole, the review says which files it read only in part and which it did not read. The model, its instructions and how much of the diff it reads are set under Settings › AI Assistant › Review before the pull request. (#265)
- Restore several files of a commit at once. A file's menu in a commit's file list offers Restore All N Files of This Commit…, or, with a filter typed, Restore the N Files Shown…, beside the single-file restore. A file the commit deleted is left out — it has no version there to put back. As with one file, it asks first, and the result lands as pending changes you can read before keeping them. (#69)
- Compare folders in your external diff tool. Compare Working Tree with Revision…, Compare Working Tree with HEAD, and, from a graph row's menu or the palette, Compare Folders with Parent and Compare Folders with Working Tree open two folders in the tool set in Settings › External tools — Beyond Compare, Meld, Kaleidoscope or any tool that compares folders. Each folder holds only the files the comparison touches, as they are on that side: an added file is absent on the left, a deleted one on the right, and a renamed file appears under both names. Nothing is checked out. Without a tool set, the command says so and opens the settings. (#79)
- The Overview shows the work in every worktree. Below the card of the branch on screen, a card for each branch checked out in another worktree says where it is, how it stands against its upstream, whether it has uncommitted changes, and its pull request; a click shows its tip in the graph, a double-click opens that worktree. A right-click on any card, the current one included, opens the branch's own menu. RECENT walks back a page at a time — past a month, to a quarter, a year, then everything — and Show older appears whenever there is older work, not only when the list is empty. (#279)
- Write / Preview on every markdown field of GitHub. The comment box and the description editor of an issue or a pull request, and the body of the pull request and issue composers, gain a Preview tab that draws the draft with the renderer the posted text is read with. The field is only hidden while you look, so the caret and the undo history are where you left them, and a field emptied by posting is back on Write. (#337)
- Squash several commits into one, from the graph. Select a run of commits with shift-click or ctrl/cmd-click, right-click it, and Squash N Commits into One… opens the interactive rebase with the plan already made — the oldest picked, the others squashed into it, git's combined message ready to edit. Nothing is rewritten until you launch it there. A selection that cannot be folded keeps the row, disabled, saying why: commits with a gap between them, on another branch than the checked-out one, down to the first commit, or with a merge the rebase would flatten. (#69)
- Open All Changes, for a branch, a stash or a pull request. One row in each of their menus opens every file they change in the editor's multi-file diff, at once. A branch is read from where it forked from the checked-out branch (the checked-out branch, from the repository's merge target); a stash against the commit it was made on, its untracked files included; a pull request is fetched and read from where it left its base on the remote. An added file opens with no left side and a deleted one with no right, instead of an empty document on one side, and a renamed file opens its old name on the left. (#284)
- Compare a file with any revision. Three commands on an editor tab's menu and in the palette: Open Changes with Revision… leads with the commits that touched the file, Open Changes with Branch or Tag… with the repository's branches and tags, and Open File at Revision… opens the file as it was. The picker takes anything git does, too — a hash,
HEAD~3,main@{yesterday}— and checks it before opening; a revision where the file does not exist says so instead of opening an empty side. From a revision already open, the comparison is against that revision. (#79) - Browse the repository at any commit, as a folder. Browse Repository at Revision… adds the whole tree, as it was at that commit, to the Explorer — read-only, read straight from git's objects, with nothing checked out and the working tree untouched; Browse Repository Before Revision… opens it as it was just before the commit. Each has an in New Window variant, and a graph row's menu offers all four for its own commit without asking. Search, go to file and the editors work on it as on any folder; a submodule shows as an empty folder, as it does in a checkout that has not run
submodule update. (#72)
Installe le VSIX directement :
code --install-extension git-vertex-1.40.0.vsix
Ou cherche Git Vertex dans le Marketplace VS Code.
v1.41.2
Fixed
- A refused GitHub request says why, instead of
HTTP 403. Pull requests, issues and every other GitHub read reported a bare status code and discarded GitHub's explanation. On a work account a 403 usually means one of two things, each with its own way out, and GitHub states which. An organisation that restricts OAuth apps and has not approved Git Vertex: the message now says so and points to github.com/settings/applications › Git Vertex › Organization access › Request, which an owner of the organisation then grants. An organisation behind SAML single sign-on: the message carries the authorisation link GitHub sends with the refusal. A spent rate limit says until when, a revoked token says to sign in again, and any other 403 quotes GitHub's own words. - The Personal Access Token field is always offered on the desktop while no account is connected, not only while a sign-in waits. A token you create yourself is not subject to an organisation's OAuth app restrictions, so it is the way through until the organisation approves the app.
v1.41.1
Fixed
- Sign in with GitHub works behind a company proxy, and never fails silently again. On a work machine whose proxy inspects HTTPS, GitHub's page said signed in while the app stayed on Connecting… for good, with nothing on screen and nothing in a log. The callback did reach the app; the request that trades GitHub's code for a token did not get out. The main process sent it, like every GitHub request, through Node's own
fetch, which ignores the system proxy and trusts only Node's own certificate list, so it failed where the browser on the same machine worked. That failure was then lost inside an event handler, so the window never heard about it. Every GitHub request of the main process now goes through Chromium's network stack (net.fetch), with the system proxy and the OS certificate store, as the browser does. Every way the sign-in can fail now ends in a message that names the server and the reason: an untrusted certificate, a proxy, DNS, a blocked connection, or the HTTP status and the start of the page that came back instead. GitHub declining the request is reported in its own words. - The sign-in can be called off, and has a fallback. While it waits for the browser, Settings › GitHub says what to check, offers Cancel, and shows the Personal Access Token field, which the desktop used to hide. On Windows the app checks that
gitgui://links lead to this copy of it before sending you to GitHub, and says so when they do not. A build missing its sign-in configuration, or a browser that would not open, is reported instead of waited on.
v1.41.0
Fixed
- Reword, squash, fixup, drop and move work on Windows. Every rewrite is a
git rebase -iwith two small scripts of ours standing in for the editors — one writes the plan, the other the message you typed. Git does not run those itself: it hands them tosh, and on Windows the path arrived with backslashes, whichshswallows —C:\Users\…\Temp\gitgui-rebase-editor-….shwas looked for asC:Users…Tempgitgui-rebase-editor-….shand not found, so the rebase stopped before it began. The paths now reach the shell with forward slashes and quoted, and the scripts run throughshrather than by their execute bit; a temp directory under a user name with a space, a quote or a$broke it on every platform the same way, and works now too. Git's own no-op editor:replacestrue, which is not on every Windows PATH. - Continue no longer throws away a commit it could not make. When
git rebase --continuefailed with nothing left in conflict, the app took the commit for an empty one and ranrebase --skip— but a commit refused for another reason, its message editor among them, still has its changes staged, and skipping discarded them. That is how a reword on Windows could lose the commit it was rewording. Continue now skips only a commit that has nothing staged, and otherwise says what git said and leaves the rebase where it is. - A rebase in a linked worktree stops on its conflicts instead of failing. In a worktree
.gitis a file pointing into the main repository's.git/worktrees/, and the rebase's state lives there; the check that tells a paused rebase from a failed one looked in<worktree>/.git/rebase-merge, found nothing, and reported a conflict as a plain error — no conflict screen, no Continue, the rebase left half-done behind it. - A long rebase is no longer cut off after 30 seconds. Every rewrite ran under a 30-second limit, which a long rebase on Windows — where each step is several slow-starting processes — or a heavy hook could outlive; git was killed mid-step and what it left was announced as a conflict. The limit is ten minutes, a rebase that reaches it says so and is left paused, and Continue never skips the step git was stopped in.
v1.40.3
Fixed
- A Copilot CLI installed with npm no longer opens a console window on Windows. npm leaves a
copilot.cmdbehind which the package'snpm-loader.jsdoes one thing: start the nativecopilot.exeof@github/copilot-win32-x64— withstdio: 'inherit'and nowindowsHide. The app ran that loader, hidden, and the loader's child came up in a console of its own, on screen, for as long as the runtime lived. The app now starts the native binary itself (nested under the package or hoisted beside it, for the machine's architecture), which it starts hidden; the loader is only the fallback when no native package is there.
v1.40.2
Fixed
- GitHub Copilot no longer opens a PowerShell window. 1.40.1 went looking for VS Code's own
copilotunderbin\copilot-shim— and started it. That file is a launcher for VS Code's integrated terminal, not the CLI: run by the app it opened a visible PowerShell window, at startup and on every visit to Settings › AI Assistant, and it did not stay up as a server, which is where the Client not connected below came from. It is no longer looked for, and is skipped wherever it is found, the PATH included. When it is the onlycopiloton the machine, the row says so — not used, VS Code's launcher — beside the install line for the real CLI. ACOPILOT_CLI_PATHthat names it on purpose is still honoured. - GitHub Copilot no longer stays on Client not connected after the Copilot CLI stops. The app keeps one CLI runtime and reuses it, and the SDK keeps its client object after the process behind it has exited — every later call on it then throws Client not connected. So a CLI that stopped once, after the settings row had already listed its models, left Copilot dead until the app was restarted. The runtime is now checked on every use and started again when it has gone, and a call that loses it halfway is made once more on the new one — safe, since Copilot runs here with no tools and an answer that never arrived changed nothing. A CLI that stops again straight away is not retried a third time: the message says so, names the binary it was started from, and quotes its exit code and the last lines it wrote, which is what tells a broken install from a passing crash.
v1.40.1
Fixed
- GitHub Copilot finds the Copilot CLI when the app is started from its icon, and says where it looked when it does not. The CLI was looked for on the PATH alone, and an app started from a desktop icon has the PATH of what launched it — on Windows, Explorer's — which is not the terminal's: a CLI installed since, or put on the PATH of some terminals only, was not found while
where copilotanswered. VS Code's Copilot extension is that second case: it installs its owncopilotunderbin\copilot-shimand puts that folder on the PATH of its integrated terminals only. After the PATH, the app now also looks where the installers put it — on Windows%APPDATA%\npm, winget'sLinksand VS Code'scopilot-shim(user, Insiders and system installs); elsewhere~/.local/binand both Homebrews — and the PATH still wins. When none of them holds it, the message lists every folder it looked in, and aCOPILOT_CLI_PATHthat names nothing says so instead.
v1.40.0
Security
- Built on Electron 45 (Chromium and Node security fixes), from 44. Nothing the app uses was removed: the preload only reaches
contextBridge,ipcRendererandwebFrame, none of the Node shims Electron 45 takes out of sandboxed preloads; the Theme Builder window is sandboxed like its opener, sowindow.openstill hands it back. The synchronoussafeStoragecalls that seal the credentials are deprecated in 45 and go in 46 — they still work, and moving to the asynchronous ones is the next upgrade's work.
Added
- GitHub Copilot is an AI provider: your Copilot subscription writes the commit messages, explanations and descriptions. It has no key to paste, so its row in Settings › AI Assistant is a switch: turning it on asks the Copilot CLI — run in server mode through GitHub's own SDK (
@github/copilot-sdk) — whether it is signed in, and lists the models your account may use, which then join the pickers like any other provider's. The CLI is yours: install it (npm install -g @github/copilotorbrew install copilot-cli), runcopilotonce and/login; it is found on your login shell's PATH, as git is, or named withCOPILOT_CLI_PATH. The SDK can bundle a runtime, and it is 171 MB per platform, so the installers leave it out. The CLI is an agent and the app wants a sentence: every request runs with no tools at all, the system prompt replaced, a scratch directory as its working tree — so the repository's instructions are not read and nothing can reach a file — and the session is deleted afterwards, never left in yourcopilot --resumelist. The runtime starts on first use, stays warm for ten minutes, and goes with the app. A missing CLI or a CLI that is not signed in is said on the row, and a request fails once, saying how to fix it, rather than three times. The model picker wears what a message on each Copilot model costs in premium requests —0×for what the plan includes,10×in the warning ink — so a ten-fold model is not picked for one-line commit messages by accident. - The model is offered on the refs themselves: what is unpushed, a new cut of a branch's commits, a changelog since a tag (#293). A local branch ahead of its upstream offers Explain Unpushed Changes in its AI menu — the branch reading, asked of
<upstream>..<branch>instead of the trunk; a branch with nothing unpushed, no upstream or a gone one does not offer it. Every local branch offers Recompose Commits: the commit composer is handed everything the branch carries over its base as one diff, proposes a new cut of it, and applying the reviewed plan takes the branch back to where it forked — its work staged, nothing lost — then commits the plan exactly as a split of the working tree is committed. It runs on the checked-out branch only: the composer commits in the working tree, and switching branches behind your back is not something it will do, so any other branch shows the row disabled, saying to check it out first. Tracked uncommitted changes are refused before the model is asked, a branch that moved since the proposal is refused at apply, and the old tip stays in the reflog (and is named if the apply stops halfway). Every tag offers Generate Changelog of<branch>Since This Tag —<tag>..<the branch you are on>; the branch rather than HEAD, because the changelog is kept under what it describes, and not at all on a detached HEAD. The unpushed reading and a tag's changelog are kept under their range, beside the branch's own reading rather than over it, and inserting a tag's changelog is no longer refused as a deleted branch. No new prompt: all three reuse Explain Branch, Generate Changelog and the composer. - A pull request can be found by number, whatever its state, and its row says more. The Pull requests view holds the fifty open requests, and its search box only narrowed those — so a request merged last week could not be found at all, and
#12matched every number with a 12 in it. Typing#123now narrows to that one request, and when the list does not hold it the view offers to fetch it — open, closed or merged — and opens it in the pull request sheet;Enterdoes the same, and a number that is no request says so. A request from a fork carries a marker on its row, naming the fork. The row's hover adds its checks, its review decision and its size (additions, deletions, files). The fork rides the list's own request; the other three are not on the list endpoint at all, so they are one GraphQL query for the whole list, asked when the first card opens and held for a minute — never one request per row, and nothing added to the minute-by-minute poll, which stays free while nothing changes. (#291) - A key per side bar view.
1to9bring a view of the side bar into sight — Overview, AI, Worktrees, Branches, Remotes, Stash, Tags, Pull requests, Issues, in the order the VS Code panel's rail draws them — switching the column to its List or AI tab first when it has to. Bare digits, because the graph already owns the plain letters and a chord belongs to the system; never while typing in a field, nor under a dialog or a menu. The?sheet lists them. (#277) - The pull request and issue sections say why they are empty. A repository on GitHub with no account connected had no sections at all, the same as a repository with nothing on GitHub — two situations with different fixes and one blank. The sections now say No GitHub account is connected and open Settings › GitHub; a read that failed for any other reason is quoted, with Try again. A repository with no GitHub remote still has no sections, as it always had. (#292)
- Side bar rows say more of what they are. A branch row shows how long ago its tip was committed, a worktree mark when another worktree has it checked out — the switch git would refuse there — and a tooltip that says what it tracks and where it stands, its open pull request, and that worktree. A tag row shows its annotation; a lightweight tag, which has none, shows none rather than its commit's subject. A stash row names the branch it was made on and its age — read from the stash's own commit, so a renamed stash keeps it. Every fact comes out of the call that already builds the list, one process per list: nothing is asked of git per row as it scrolls into view. (#278)
- The commit search and the pull-request filter can run on a judgement engine: TypeSafe (Jev). A provider does not have to answer in prose to be one. TypeSafe answers with typed verdicts — a probability, one option out of a set — and joins the catalog on a fourth dialect, serving the two features that select rather than write: search in words and describe a filter. The catalog now says which features a provider serves, and one that names none serves them all, so nobody's settings moved. The per-feature picker offers only the providers that can serve the feature and heads its list with what is built for it, with one line saying what it buys and the pair one click away; the global default never offers a restricted provider, since that pair answers every feature and would fall through, silently, on the seven it cannot serve. Search judges each commit against the words by its position: the engine is never handed a hash, so an invented one is not skipped after the fact, it cannot be written at all — and a search reads a thousand commits instead of two hundred cut to fit one prompt, keeping the fifty most probable, in about three seconds. Filter asks one question per qualifier and the app composes the query from the same vocabulary the field validates, so it is valid by construction rather than by inspection; a description with nothing filterable in it composes nothing rather than an empty query that reads as success. A provider that publishes no model list reads 2 models — key not checked rather than wearing the tick of a key that answered.
- A filter can say when something was merged or closed.
merged:(pull requests) andclosed:(both sections) join the vocabulary of saved filters — typed by hand, validated, suggested, and understood when a filter is described: merged since 2026-09-01 used to come back as a query without its date, the section having no qualifier to hang it on. Measured against the judgement engine on sixteen described filters, twice, sixteen of sixteen: merged in the last week, issues fermées cette semaine and the rest land on the right date and on no other.closed:steps aside whenmerged:is there — a merged pull request is a closed one, and asked separately the two both lit up on merged this year. - A remote row opens the remote on its forge, takes the default back, and opens onto its branches. Right-click a remote in REMOTES: Open Repository on Remote, Open Branches on Remote and Copy Branches URL — built from that remote's own URL, so
upstream's branches page isupstream's and not the default remote's, on GitHub (Enterprise included), GitLab and Bitbucket; a remote that is a path on disk offers none of them rather than a link to nowhere. Unset as Default Remote takes an explicit choice back — until now it could only be overwritten by another one — and the badge moves to what the default falls back to,originor the first remote; it is offered only on the remote someone chose, sinceoriginwinning by default has nothing to unset. And a remote opens — its chevron, or a click on the row — onto its own branches, drawn by the same function as Branches › REMOTE, so each carries the same card, switch and fetch on hover and the same menu. The default remote's reading, setting and unsetting now live once in the shared git core, which the panel runs too. (#289) - A tag row does what the commit it tags can. It could check that commit out, copy its name, push, hide and de...
Git Vertex VS Code Extension v1.39.0
Git Vertex VS Code Extension v1.39.0
Fixed
- Reword, squash, fixup, drop and move work on Windows. Every rewrite is a
git rebase -iwith two small scripts of ours standing in for the editors — one writes the plan, the other the message you typed. Git does not run those itself: it hands them tosh, and on Windows the path arrived with backslashes, whichshswallows —C:\Users\…\Temp\gitvertex-rebase-editor-….shwas looked for asC:Users…Tempgitvertex-rebase-editor-….shand not found, so the rebase stopped before it began. The paths now reach the shell with forward slashes and quoted, and the scripts run throughshrather than by their execute bit; a temp directory under a user name with a space, a quote or a$broke it on every platform the same way, and works now too. Git's own no-op editor:replacestrue, which is not on every Windows PATH. - Continue no longer throws away a commit it could not make. When
git rebase --continuefailed with nothing left in conflict, the panel took the commit for an empty one and ranrebase --skip— but a commit refused for another reason, its message editor among them, still has its changes staged, and skipping discarded them. That is how a reword on Windows could lose the commit it was rewording. Continue now skips only a commit that has nothing staged, and otherwise says what git said and leaves the rebase where it is. - A rebase in a linked worktree stops on its conflicts instead of failing. In a worktree
.gitis a file pointing into the main repository's.git/worktrees/, and the rebase's state lives there; the check that tells a paused rebase from a failed one looked in<worktree>/.git/rebase-merge, found nothing, and reported a conflict as a plain error — no conflict screen, no Continue, the rebase left half-done behind it. The panel's conflict mode and merge message were read from the same wrong place, and are read from the right one. - A long rebase is no longer cut off after 30 seconds. Every rewrite ran under a 30-second limit, which a long rebase on Windows — where each step is several slow-starting processes — or a heavy hook could outlive; git was killed mid-step and what it left was announced as a conflict. The limit is ten minutes, a rebase that reaches it says so and is left paused, and Continue never skips the step git was stopped in.
Installe le VSIX directement :
code --install-extension git-vertex-1.39.0.vsix
Ou cherche Git Vertex dans le Marketplace VS Code.