Git Log could lose commits when filtering by several paths, draw wrong
ancestry after filtering or collapsing rows, and open the wrong
repository in multi-root views. The graph is now projected over the full
commit DAG and laid out in Bek order, so filtered and collapsed views keep
the real ancestry; each log view keeps its own filters and requests.
Commit metadata, messages and path changes are kept in a persistent index
(by object id, in the IDE's cache directory) with seekable paging, and the
log gains parent-aware merge comparisons, a lazy revision browser,
read-only logs of repositories outside the project (opened with command
execution disabled), commit bookmarks, configurable built-in columns and
batched commit details. The adapted IntelliJ algorithms are attributed in
THIRD_PARTY_LICENSES.md.
Closes#872
Co-authored-by: shohruh-genius <[email protected]>
Scroll containers set cursor: text, and the webview applies an element's cursor to its scrollbar, so scrollbars showed the I-beam. The containers now keep the arrow and the text inside them gets the I-beam: the editor (.cm-content instead of .cm-scroller, which also covers the diff and merge editors), the source preview, the Run, Build and Debugger consoles, the Git console, the Database output and the Services log.
Co-authored-by: ppxb <[email protected]>
CI / Rust (ubuntu-22.04) (push) Failing after 1h0m11s
CI / Remote server (linux musl) (push) Failing after 24m56s
CI / Cargo deny (push) Successful in 45s
CI / Frontend (push) Successful in 26m0s
CI / E2E (push) Failing after 14m57s
CI / Rust (macos-latest) (push) Canceled after 0s
CI / Rust (windows-latest) (push) Canceled after 0s
Branch and tag labels in the commit details pane inherited the graph row's 180px single-line limit and were clipped. Labels in the details metadata now use the pane width and wrap, including names without break points; graph-row labels keep their single-line ellipsis.
Fixes#996
Co-authored-by: guozhiqiang123 <[email protected]>
- Filters that do not fit the toolbar move behind a chevron that lists
them, so the action buttons on the right stay visible.
- Commits on the current branch are tinted unless the log is filtered to
that branch, instead of dimming the others only when other branches
happen to be loaded.
- The HEAD commit is drawn as a ring around a dot.
- A wide graph no longer paints the subject and references over the
author column; references shrink down to their icon.
- Scrollbar thumbs keep a minimum length on long lists.
Git Log ref labels use an outlined tag glyph in the ref colour instead of a solid flag; log rows are 26px with wider graph lanes and larger nodes. With Highlight › Current Branch on, commits outside HEAD are dimmed instead of the current branch being tinted. Excluded folders in the project tree get a tinted row background (Tree gains an optional rowClassName). The favorite star is a rounder shape, and the filled one has no separate outline stroke.
The Git tool window followed one globally selected repository even when multiple roots were registered. Aggregate repository logs and branches, preserve repository identity in selections, history tabs, stashes, diffs and patch commands, and capture repository targets for delayed operations and dialogs. Validate tag names against the captured repository.
Fixes#195
- Settings › Commit › "Use non-modal commit interface": when off, Local
Changes, Shelf and Stash become tabs of the Git tool window and ⌘K opens
a Commit dialog; switches live.
- Git tool window: Worktrees tab; Show History and Show Git Log for a
branch open their own closable tabs instead of changing the Log filters.
- Log: toolbar and context menu for a commit's changed files, vertical
toolbar, Tags node and hiding for the branches pane, Collapse / Expand
Linear Branches as separate actions, and a Version Control › Log page.
- Branch popup: collapsible groups, branches grouped by prefix, an options
menu behind the gear, incoming / outgoing icons and "Pull into … Using
Rebase / Merge"; New Branch on ⌥⌘N outside the editor.
- Git main menu regrouped with Uncommitted Changes and Current File
submenus; rebase / merge controls enabled only while one is in progress.
- Settings: Version Control lists its pages; new options for clearing the
initial commit message, showing Update options, confirming dropped
commits, revealing created patches, large-file and file-name warnings,
the Push dialog after Commit and Push, combined stashes and shelves, and
removing applied files from the shelf.
The Branch filter in the Git log opens a popup with a search field instead of a plain menu. Branches are fuzzy-matched with highlights and grouped under HEAD, Local and Remote; arrow keys skip the group headers and Enter applies the filter. The list is virtualized so large repositories stay responsive, and Select… still opens the multi-branch / custom revision chooser.
Co-authored-by: zzxzz12345 <[email protected]>
Root cause: the Git Log already supported multi-selection, but the Changes pane only read the last clicked commit and the backend had no "changes across several commits" query.
Fix (IDEA): ide-vcs Repo::commits_changes merges per-file changes across selected commits (before the first touching commit ↔ after the last, renames chained, add-then-delete dropped); the details pane shows "N files in M commits" with the commit list; exactly two commits get "Compare Versions" (version ↔ version dialog, also fixing added/deleted sides).
Siblings covered: Show History for file/folder (same log), Local History multi-select (oldest ↔ newest diff).
Verified: ide-vcs tests incl. temp-repo commits_changes, vcs vitest (143), in-app on macOS: 3 contiguous commits → "2 files in 3 commits"; Cmd-click 2 commits → Compare Versions lists the right files.
Claude-Session: https://claude.ai/code/session_01VUYsdXA2nkF5v6zsC93dpn
Project & files
- Project view modes (Project Files / Open Files / All Changed Files /
Scratches); External Libraries for Python, JDK (src.zip), Node, Cargo, Go,
Maven/Gradle jars; read-only jar/zip browsing
- ⌘N New popup with type search and more file kinds; New Project, Rename
Project, Reload All from Disk, Export/Import Settings, Power Save Mode
- File type associations, extra content roots and exclude patterns (indexed
and watched without reopening the project)
Editor & navigation
- Find bar: search scope (comments/strings), Preserve Case, Exclude, multiline,
history; Find in Files: Module scope, custom pattern scopes, multiline
- Search Everywhere filters, Assign Shortcut, settings results; named bookmark
lists, file/folder bookmarks; Structure filters and Show Inherited; Recent
Locations timestamps and breadcrumbs; Code Vision author
- Completion options, editor tab placement/layout, inline completion (LSP 3.18)
- Spell checking (Typo inspection, ide-spell) and Inspections settings with
custom profiles; Code Style schemes, formatter markers, Do not format
Run, VCS, services, database
- Typed run configurations (Shell, Program, npm, Gradle, Maven, Docker,
Compound), Modify options, Before launch, env dialog, Current File,
Emulate terminal (PTY)
- Git log graph/view options, Go to Hash/Branch/Tag, date filter keeps the
graph; Pull/Merge/Rebase dialogs, Manage Remotes, Worktrees
- Generic Services host (Docker connections/registries, run sessions); TODO
scope/changes tabs with changelists; Coverage report import
- Data sources: wire-compatible vendors, URL import, SSL certs, Options,
Schemas and Advanced tabs, color and comment
Workbench
- Run Anything, Customize Main Toolbar, named tool window layouts, menu
completeness, Code Cleanup, macros, "Don't Show Again", editor banners
- Chinese translations for the new UI
Claude-Session: https://claude.ai/code/session_01SaPPsVPuk6ZTNsoUCNCbMv