Repository navigation
GitCrisp v1.3.0
What's Changed
- Build hunk patches that git apply accepts byte for byte by @Aidan79225 in #182
- Keep the commit graph loading when a dirty file name is non-ASCII by @Aidan79225 in #181
- List only the commits an interactive rebase would replay by @Aidan79225 in #183
- Keep blame lines beside their commits in files with form feeds by @Aidan79225 in #184
- Show non-ASCII file names as written in Insight by @Aidan79225 in #185
- Split the commit graph's page walk into named steps by @Aidan79225 in #186
- Stage and discard symlinks whose target is missing by @Aidan79225 in #187
- Pin cherry-pick, revert and file history to a given gitdir by @Aidan79225 in #188
- Make file history's git log honour the exact path and rename choice by @Aidan79225 in #189
- Respect the user's own SSH client for remote operations by @Aidan79225 in #190
- Remove the open worktree without leaving an empty folder by @Aidan79225 in #191
- Show and edit the URL of a submodule named unlike its path by @Aidan79225 in #192
- Remove only the chosen submodule when its path has glob characters by @Aidan79225 in #193
- Delete a removed submodule's repository so its path can be reused by @Aidan79225 in #194
- Stop clones hanging on submodule output and show why they fail by @Aidan79225 in #195
- Decode git's push, fetch and remote tag output as UTF-8 (+1 related) by @Aidan79225 in #196
- Keep cached remote tags when the remote cannot be listed by @Aidan79225 in #197
- Leave the repository as it was when a checkout is refused (+1 related) by @Aidan79225 in #198
- Create a branch from a typed start point such as HEAD or a tag by @Aidan79225 in #199
- Apply interactive rebase choices in the installed app by @Aidan79225 in #200
- Keep the chosen message and the banner through a conflicted merge by @Aidan79225 in #201
- Make "Interactive rebase onto " land on that branch by @Aidan79225 in #202
- Save the commit identity without flashing console windows by @Aidan79225 in #203
- Decode git's output as UTF-8 so its messages survive non-ASCII by @Aidan79225 in #204
- Let Add Worktree use an empty folder or a reused folder name (+7 related) by @Aidan79225 in #205
- Keep git from waiting on the terminal the app was started from by @Aidan79225 in #206
- Add GitCliConfig to ask git whether an ssh command is set by @Aidan79225 in #207
- Read and write worktree locks through one helper by @Aidan79225 in #208
- Clone with the user's own configured ssh command (+1 related) by @Aidan79225 in #209
- Define RemoteOperationCancelled beside the port that promises it by @Aidan79225 in #210
- Keep Cancel aimed at the running push, pull or fetch by @Aidan79225 in #211
- Split get_tags into annotated and lightweight tag readers by @Aidan79225 in #212
- Let a running clone be cancelled and clean up its folder by @Aidan79225 in #213
- Declare forget on the repo store port by @Aidan79225 in #214
- Finish an interactive rebase that picks a commit the target has by @Aidan79225 in #215
- Share the rebase editor's temp-file handling by @Aidan79225 in #216
- Keep launching when the last active repo will not open by @Aidan79225 in #217
- Stop adding an active worktree to the open repo list at launch by @Aidan79225 in #218
- Keep repos on unmounted drives and start on the first that opens by @Aidan79225 in #219
- Keep the commit list's place across reloads and branch clicks by @Aidan79225 in #220
- Run a graph reload requested while another load is in flight by @Aidan79225 in #221
- Let a click on a previously selected commit reach the diff pane (+7 related) by @Aidan79225 in #222
- Show no hash on the uncommitted-changes row by @Aidan79225 in #223
- Redraw the graph even when the first-parent choice cannot be saved by @Aidan79225 in #224
- Never lose the repo list to a broken or half-written repos.json by @Aidan79225 in #225
- Wrap, elide and lay out commit row text so nothing overlaps by @Aidan79225 in #226
- Colour local branches with a slash as local in the commit graph by @Aidan79225 in #227
- Stop right-clicks in the changed-files list from staging files by @Aidan79225 in #228
- Commit with the right message after a repo switch, merge or checkout by @Aidan79225 in #229
- Skip the word-level highlight on very long changed lines by @Aidan79225 in #230
- Show "No newline at end of file" as one unnumbered line by @Aidan79225 in #231
- Pair each removed line with its counterpart in unified word diffs by @Aidan79225 in #232
- Keep highlights on their characters after an emoji or a BOM by @Aidan79225 in #233
- Load both blocks of a path a commit lists twice by @Aidan79225 in #234
- Fix and tidy the diff views and the working-tree panel (part 1 of 3) by @Aidan79225 in #235
- Fix and tidy the diff views and the working-tree panel (part 2 of 3) by @Aidan79225 in #236
- Fix and tidy the diff views and the working-tree panel (part 3 of 3) by @Aidan79225 in #237
- Report why a hunk could not be staged, unstaged or discarded by @Aidan79225 in #238
- Discard a file through git restore, work tree first by @Aidan79225 in #239
- Resolve a modify/delete conflict when its file is staged or discarded by @Aidan79225 in #240
- Show and stage a file replaced by a symlink as one change by @Aidan79225 in #241
- Diff the index against HEAD through one shared helper by @Aidan79225 in #242
- Drop the slash-means-remote fallback and dead badge code (+1 related) by @Aidan79225 in #243
- Give the graph painters one definition of badge, row and lane sizes by @Aidan79225 in #244
- Let the theme decide how many lane colours the graph cycles through by @Aidan79225 in #245
- Set up GraphModel's listing in one place by @Aidan79225 in #246
- Build the commit view and its all-files render in named steps by @Aidan79225 in #247
- Simplify the working-tree panel's Stage All and Commit handlers by @Aidan79225 in #248
- Lay out a working-tree file's hunks in one place by @Aidan79225 in #249
- Share the diff renderers' scheduler and split them into named steps by @Aidan79225 in #250
- Keep the no-newline marker set in the domain beside LineKind by @Aidan79225 in #251
- Name the message chevron and hunk checkboxes for screen readers by @Aidan79225 in #252
- Keep the sidebar on the open repo when a load is late or fails by @Aidan79225 in #253
- Report a failed Checkout from the sidebar branch menu by @Aidan79225 in #254
- Build the pushed-tag cloud icon once per sidebar reload by @Aidan79225 in #255
- Make drag-to-reorder work again in the repository list (+2 related) by @Aidan79225 in #256
- Resize the REPOSITORIES title when the text scale changes by @Aidan79225 in #257
- Share one row-highlighting tree between sidebar and repo list by @Aidan79225 in #258
- Accept repo drops only inside the OPEN section by @Aidan79225 in #259
- Keep author avatars loading after network or disk errors by @Aidan79225 in #260
- Colour author avatars from the theme with readable initials by @Aidan79225 in #261
- Stop and free Git Insight when its dialog closes by @Aidan79225 in #262
- Count Git Insight's date ranges in local time (+1 related) by @Aidan79225 in #263
- Read block positions only once the scroll content fits its blocks by @Aidan79225 in #378
- Build each sidebar section in its own method by @Aidan79225 in #264
- Load the blamed line's commit on the first pick by @Aidan79225 in #265
- Keep blame from freezing the window on large files by @Aidan79225 in #266
- Keep blame's syntax colours aligned after an emoji by @Aidan79225 in #267
- Re-measure the blame gutter when the typography scale changes by @Aidan79225 in #268
- Let the blame column narrow below the length of its file path by @Aidan79225 in #269
- Keep blame's gutter beside its line after a lone carriage return by @Aidan79225 in #270
- Stop setting a window title on the blame pane nobody can see by @Aidan79225 in #271
- Cut a long commit author before the timestamp in the commit header by @Aidan79225 in #272
- Keep the reflog pane stable when the window reloads it by @Aidan79225 in #274
- Keep operations log error and link colours across a theme change by @Aidan79225 in #273
- Name the reflog operation colours by ColorRole by @Aidan79225 in #275
- Drop the reflog model's unused show_all keyword and OID role by @Aidan79225 in #276
- Write operations log link rows through one routine by @Aidan79225 in #277
- Lay out the commit header once for both painting and clicks by @Aidan79225 in #278
- Keep Remote Branches locked while a delete is running by @Aidan79225 in #279
- Delete remote branches on remotes whose names contain a slash by @Aidan79225 in #280
- Move the remote-branch name split into the domain by @Aidan79225 in #281
- Type interactive rebase todo entries with a named action set by @Aidan79225 in #282
- Keep the remote-branch delete report on screen with many failures by @Aidan79225 in #283
- Show angle brackets literally in the reset confirmation by @Aidan79225 in #284
- Add submodules without freezing the window by @Aidan79225 in #285
- Close Worktrees on Open and let its owner refresh the list by @Aidan79225 in #286
- Detect the clone folder name from a Windows path by @Aidan79225 in #287
- Let Cancel stop a running clone and never open it (+1 related) by @Aidan79225 in #288
- Create a branch from a branch name in the Branches dialog by @Aidan79225 in #289
- Move whole rows when reordering the interactive rebase list by @Aidan79225 in #290
- Block a rebase whose first kept commit is a squash or fixup by @Aidan79225 in #291
- Tell the user when saving their git identity fails by @Aidan79225 in #292
- Offer to switch to the worktree that already has the branch (+1 related) by @Aidan79225 in #293
- Restructure the Add Worktree dialog's constructor and refreshes by @Aidan79225 in #294
- Name the interactive rebase table's columns and action lookup by @Aidan79225 in #295
- Keep each rebase row's full commit id with the row by @Aidan79225 in #296
- Split the interactive rebase dialog's constructor by region by @Aidan79225 in #297
- Build interactive rebase entries from the RebaseAction enum by @Aidan79225 in #298
- Drop the merge dialog's unreachable fast-forward-only check by @Aidan79225 in #299
- Pass Preferences the function that applies crash reporting by @Aidan79225 in #300
- Split Remote Branches' refresh and delete into named steps by @Aidan79225 in #301
- Keep Delete off when Remote Branches cannot load its remotes by @Aidan79225 in #302
- Fall back to Dark when the custom theme file is malformed by @Aidan79225 in #303
- Save a reapplied custom theme without the active theme's colours by @Aidan79225 in #304
- Tell the user when Appearance settings cannot be saved by @Aidan79225 in #305
- State why a saved Custom theme keeps Dark's typography by @Aidan79225 in #306
- Stop the checkbox tick file from breaking launch or the theme by @Aidan79225 in #307
- Keep widgets' own fonts when the theme is applied by @Aidan79225 in #308
- Make the merge and rebase banner readable in the dark theme by @Aidan79225 in #309
- Keep the old text scale when Apply fails to save a custom theme by @Aidan79225 in #310
- Repaint the Appearance swatches from one place by @Aidan79225 in #311
- Draw the Appearance swatch borders in the outline colour by @Aidan79225 in #312
- Simplify ThemeManager's refresh and apply steps by @Aidan79225 in #313
- Map file status badges to their colours with an explicit table by @Aidan79225 in #314
- Name the theme modes with a ThemeMode enum by @Aidan79225 in #315
- Auto-refresh a repository opened from a subdirectory by @Aidan79225 in #316
- Open the log when a worktree operation fails by @Aidan79225 in #317
- Keep Add Worktree from offering a branch already checked out by @Aidan79225 in #318
- Show current worktree lists at launch and in the Worktrees dialog by @Aidan79225 in #319
- Retire Undo links when the window leaves their repository by @Aidan79225 in #320
- Refresh an open reflog pane on every reload by @Aidan79225 in #321
- Show the open repo's merge/rebase state in the banners by @Aidan79225 in #322
- Explain failed loads and setting saves in the operations log by @Aidan79225 in #323
- Drop two dead bits from the main-window mixins by @Aidan79225 in #324
- Refuse to open an uninitialized submodule instead of its parent by @Aidan79225 in #325
- Keep the repo list in step when repos open, switch and close by @Aidan79225 in #326
- Report a reordered repo list that cannot be saved by @Aidan79225 in #327
- Run add, lock, unlock and remove worktree through one helper by @Aidan79225 in #328
- Describe worktree_cli.py as the wrapper for worktree add and remove by @Aidan79225 in #329
- Release the previous repository when the Git menu is rebuilt by @Aidan79225 in #330
- Open the worktree that holds a branch instead of half-checking it out by @Aidan79225 in #331
- Keep edits and the right Undo when checkout resets to the remote by @Aidan79225 in #332
- Confirm before deleting a local branch or dropping a stash by @Aidan79225 in #333
- Log a failed commit merge and ask for a git identity before merging by @Aidan79225 in #334
- Merge a branch and a commit through one merge-into-HEAD flow by @Aidan79225 in #335
- Offer to force push the branch whose push was rejected by @Aidan79225 in #336
- Keep main-window actions on the right repo and show their failures (part 1 of 2) by @Aidan79225 in #337
- Keep main-window actions on the right repo and show their failures (part 2 of 5): remote work stays in the repo it was started in by @Aidan79225 in #338
- Keep main-window actions on the right repo and show their failures (part 3 of 5): a confirmed delete or reset runs only in the repo it was asked about by @Aidan79225 in #379
- Keep main-window actions on the right repo and show their failures (part 4 of 5): the remaining prompts, and the remote-branch delete's skip message by @Aidan79225 in #380
- Keep main-window actions on the right repo and show their failures (part 5 of 5): pull without a remote listing, and one path for tag-cache refreshes by @Aidan79225 in #381
- Keep deleting a tag from the other remotes when one fails by @Aidan79225 in #339
- Route the sidebar's Checkout through the window's checkout flow by @Aidan79225 in #340
- Describe the checkout flow that handles a worktree-held branch by @Aidan79225 in #341
- Close Branches and hand checkouts to the window's checkout flow by @Aidan79225 in #342
- Share one worktree lookup and split the checkout flow into steps by @Aidan79225 in #343
- Disable the Git menu items while no repo is open by @Aidan79225 in #344
- Keep local variables, hostname and home path out of crash reports by @Aidan79225 in #345
- Keep logging and log backups when two GitCrisp windows run by @Aidan79225 in #346
- Read the bundle-version tests' files as UTF-8 by @Aidan79225 in #347
- Fix or drop tests in seven places that could not fail by @Aidan79225 in #348
- Test that each operation's Undo link returns to the prior HEAD by @Aidan79225 in #349
- Check theme switches on the stylesheets they actually apply by @Aidan79225 in #350
- Drive the commit list's real context menu in its menu tests by @Aidan79225 in #351
- Delete a remote branch on the remote that actually holds it by @Aidan79225 in #352
- Remove dead commit-list code and a comment naming a missing method by @Aidan79225 in #353
- Compare the repo state against RepoState in the commit list by @Aidan79225 in #354
- Reset the commit list on a repo switch through its paging reset by @Aidan79225 in #355
- Look up a commit's row in the commit list through one helper by @Aidan79225 in #356
- Build the commit menu's one-or-submenu entries in one place by @Aidan79225 in #357
- Split the commit list's reload handler into named steps by @Aidan79225 in #358
- Hover commit rows with the theme's hover overlay colour by @Aidan79225 in #359
- Use the status enums in tests and drop the migration story by @Aidan79225 in #360
- Lay out the unlinked-submodule fixture as git submodule add does by @Aidan79225 in #361
- Run cherry-pick, revert and file history in the opened repository by @Aidan79225 in #362
- Show file history and run cherry-pick in a bare repository by @Aidan79225 in #363
- Raise CommitOpsCommandError for every failed cherry-pick or revert by @Aidan79225 in #364
- Keep test runs out of the real AppData and cache folders by @Aidan79225 in #365
- Identify Git Insight's ranges by an enum, not button captions by @Aidan79225 in #366
- Let the sidebar and Git Insight take a background runner by @Aidan79225 in #367
- Fix three tests that pass or fail by run order or timing by @Aidan79225 in #368
- Make the submodule-open and repo-list save tests able to fail by @Aidan79225 in #369
- Pin every test repo's first branch to master by @Aidan79225 in #370
- Build the bare MainWindow for tests in one shared helper by @Aidan79225 in #371
- Keep the test suite away from Sentry and the GitHub API by @Aidan79225 in #372
- Test the commit list and working tree on their real widgets by @Aidan79225 in #373
- Drop the identity dialog tests' redundant app helper by @Aidan79225 in #374
- Bump ruff from 0.16.10 to 0.17.1 in the dev-deps group by @dependabot[bot] in #375
- Bump sentry-sdk from 2.71.0 to 2.72.0 by @dependabot[bot] in #376
Full Changelog: v1.2.0...v1.3.0