Skip to content

Escape the merge conflicts view before prompting to continue the rebase - #5822

Merged
stefanhaller merged 1 commit into
masterfrom
fix-stuck-merge-conflicts-view
Jul 16, 2026
Merged

stefanhaller merged 1 commit into
masterfrom
fix-stuck-merge-conflicts-view

Conversation

@stefanhaller

Copy link
Copy Markdown
Collaborator

When the last conflict of a file is resolved, a files refresh both offers to continue the rebase/merge (if we started it ourselves) and, via its merge-conflicts scope, escapes from the merge conflicts view back to the files context. The two race: the prompt is bounced onto the UI thread by the files worker, while the escape's context push is queued separately by EscapeMerge, and it deliberately refuses to push the files context over a popup. So if the prompt opens first, the escape does nothing, and closing the prompt lands the user in the stale merge conflicts view — usually already emptied by the escape's state reset — instead of the files panel. No later refresh rescues this.

Fix this by escaping from the merge conflicts view right before opening the prompt. This runs on the UI thread and doesn't hold the merge conflicts mutex, so it can reset the state and push the files context synchronously; whichever side runs first, the prompt now always opens on top of the files context, and EscapeMerge's guarded push still does nothing only when that's the right thing to do.

This is a timing race with no deterministic regression test; it showed up as a rare flake in tests that cancel the continue prompt (e.g. commit/amend_when_there_are_conflicts_and_continue) when looping the integration tests under the race detector.

When the last conflict of a file is resolved, a files refresh both
offers to continue the rebase/merge (if we started it ourselves) and,
via its merge-conflicts scope, escapes from the merge conflicts view
back to the files context. The two race: the prompt is bounced onto
the UI thread by the files worker, while the escape's context push is
queued separately by EscapeMerge, and it deliberately refuses to push
the files context over a popup. So if the prompt opens first, the
escape does nothing, and closing the prompt lands the user in the
stale merge conflicts view — usually already emptied by the escape's
state reset — instead of the files panel. No later refresh rescues
this.

Fix this by escaping from the merge conflicts view right before
opening the prompt. This runs on the UI thread and doesn't hold the
merge conflicts mutex, so it can reset the state and push the files
context synchronously; whichever side runs first, the prompt now
always opens on top of the files context, and EscapeMerge's guarded
push still does nothing only when that's the right thing to do.

This is a timing race with no deterministic regression test; it
showed up as a rare flake in tests that cancel the continue prompt
(e.g. commit/amend_when_there_are_conflicts_and_continue) when
looping the integration tests under the race detector.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@stefanhaller stefanhaller added the bug Something isn't working label Jul 16, 2026
@stefanhaller
stefanhaller enabled auto-merge July 16, 2026 12:44
@stefanhaller
stefanhaller merged commit 07745af into master Jul 16, 2026
13 of 14 checks passed
@stefanhaller
stefanhaller deleted the fix-stuck-merge-conflicts-view branch July 16, 2026 12:44
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Aug 11, 2026
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [jesseduffield/lazygit](https://github.com/jesseduffield/lazygit) | minor | `v0.63.1` → `v0.64.0` |

MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).

**Proposed changes to behavior should be submitted there as MRs.**

---

### Release Notes

<details>
<summary>jesseduffield/lazygit (jesseduffield/lazygit)</summary>

### [`v0.64.0`](https://github.com/jesseduffield/lazygit/releases/tag/v0.64.0)

[Compare Source](jesseduffield/lazygit@v0.63.1...v0.64.0)

<!-- Release notes generated using configuration in .github/release.yml at v0.64.0 -->

#### What's Changed

This release has massive changes, but most of them should hopefully not be visible: I completely overhauled lazygit's concurrency model, which was, let's say, less than robust; there were lots of data races, and we were just lucky that this didn't result in crashes or misbehavior more often. We now have a robust concurrency model with no known data races, and in fact we run our integration test suite on CI with the `-race` flag to prove that. The user visible part of this is that some operations run a little more smoothly now; for example, there used to be an ugly spinner freeze at the end of checking out a branch, which is now gone.

However, since the changes were so massive there's a higher-than-usual chance of regressions, so please report any that you find.

Apart from that, we also have a few useful enhancements; the most notable one is probably that we now show the Github checks status of pull requests in the branches panel.

##### Enhancements 🔥

- Show a spinner for more long-running operations by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5765](jesseduffield/lazygit#5765)
- Remove the BLOCK\_UI refresh mode by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5790](jesseduffield/lazygit#5790)
- Support a `{{diffContext}}` template variable in external diff command by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5841](jesseduffield/lazygit#5841)
- Some small UI polish by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5853](jesseduffield/lazygit#5853)
- Auto-scroll when dragging to create range selection in staging view by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5855](jesseduffield/lazygit#5855)
- Create a range selection in list views by dragging with the mouse by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5856](jesseduffield/lazygit#5856)
- Reorder commits (or rebase todos) by dragging with the mouse by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5857](jesseduffield/lazygit#5857)
- Rework the custom pager config (rename to diff renderer) by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5870](jesseduffield/lazygit#5870)
- Show a Github MR's combined checks state in branches list (and main view for selected branch) by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5874](jesseduffield/lazygit#5874)

##### Fixes 🔧

- Fix stuck inline status when pushing/fetching by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5768](jesseduffield/lazygit#5768)
- Escape the merge conflicts view before prompting to continue the rebase by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5822](jesseduffield/lazygit#5822)
- Fix side panel rendering when branches/commits are not their panel's first tab by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5825](jesseduffield/lazygit#5825)
- Suppress output from a few git commands that pollute the command log by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5834](jesseduffield/lazygit#5834)
- Fix stall with ctrl+z and fg by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5830](jesseduffield/lazygit#5830)
- Fix more problems related to concurrent repo switch and background refresh by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5839](jesseduffield/lazygit#5839)
- Fix Windows crash when switching to fullscreen mode with a custom pager by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5838](jesseduffield/lazygit#5838)
- Fix multi-selection of files with common prefix not working in commit files panel by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5868](jesseduffield/lazygit#5868)
- Support absolute paths when detecting edit preset from EDITOR env var by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5876](jesseduffield/lazygit#5876)
- Exclude more commit trailers from auto-wrapping by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5871](jesseduffield/lazygit#5871)
- Prevent stale index.lock files from diffs rendered through a pty on Windows by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5888](jesseduffield/lazygit#5888)
- Fix orphaned processes on Windows when quickly navigating between commits by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5885](jesseduffield/lazygit#5885)

##### Maintenance ⚙️

- Perform refresh model and view updates on the UI thread instead of using mutexes by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5767](jesseduffield/lazygit#5767)
- Fix data race with status string by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5777](jesseduffield/lazygit#5777)
- Fix data race with command log by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5779](jesseduffield/lazygit#5779)
- Make integration tests using commits more robust by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5782](jesseduffield/lazygit#5782)
- Synchronize ViewBufferManager.Close with a starting task by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5786](jesseduffield/lazygit#5786)
- Make model<->view index conversions independent of rendering by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5785](jesseduffield/lazygit#5785)
- Fix idle notification deadlock by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5821](jesseduffield/lazygit#5821)
- Bump tcell to an unreleased snapshot to fix a shutdown race by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5824](jesseduffield/lazygit#5824)
- Fix command log streaming race by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5789](jesseduffield/lazygit#5789)
- Synchronize async view rendering by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5791](jesseduffield/lazygit#5791)
- Run tests with race detection on CI by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5792](jesseduffield/lazygit#5792)
- Gocui mouse event fixes by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5854](jesseduffield/lazygit#5854)
- Move Github MR cache out of state.yml into a separate file by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5884](jesseduffield/lazygit#5884)
- Make justfile commands available in the Nix development shell by [@&#8203;TyceHerrman](https://github.com/TyceHerrman) in [#&#8203;5890](jesseduffield/lazygit#5890)

##### Docs 📖

- Clarify contribution policy by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5809](jesseduffield/lazygit#5809)

##### I18n 🌎

- Update translations from Crowdin by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5891](jesseduffield/lazygit#5891)

##### Performance Improvements 📊

- Make scrolling down a very long diff with the scroll wheel much smoother by [@&#8203;stefanhaller](https://github.com/stefanhaller) in [#&#8203;5780](jesseduffield/lazygit#5780)

#### New Contributors

- [@&#8203;TyceHerrman](https://github.com/TyceHerrman) made their first contribution in [#&#8203;5890](jesseduffield/lazygit#5890)

**Full Changelog**: <jesseduffield/lazygit@v0.63.1...v0.64.0>

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this MR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yODguMCIsInVwZGF0ZWRJblZlciI6IjQzLjI4OC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiLCJhdXRvbWF0aW9uOmJvdC1hdXRob3JlZCIsImRlcGVuZGVuY3ktdHlwZTo6bWlub3IiXX0=-->
social4hyq pushed a commit to social4hyq/homebrew-core that referenced this pull request Sep 20, 2026
lazygit 0.64.0

Created-by: HarmonybrewBot
Commit-by: HarmonybrewBot
Merged-by: HarmonybrewBot
Description: Created by `brew bump`

---

Created with `brew bump-formula-pr`.<details>
  <summary>release notes</summary>
  <pre><!-- Release notes generated using configuration in .github/release.yml at v0.64.0 -->

## What's Changed

This release has massive changes, but most of them should hopefully not be visible: I completely overhauled lazygit's concurrency model, which was, let's say, less than robust; there were lots of data races, and we were just lucky that this didn't result in crashes or misbehavior more often. We now have a robust concurrency model with no known data races, and in fact we run our integration test suite on CI with the `-race` flag to prove that. The user visible part of this is that some operations run a little more smoothly now; for example, there used to be an ugly spinner freeze at the end of checking out a branch, which is now gone.

However, since the changes were so massive there's a higher-than-usual chance of regressions, so please report any that you find.

Apart from that, we also have a few useful enhancements; the most notable one is probably that we now show the Github checks status of pull requests in the branches panel.

### Enhancements 🔥
* Show a spinner for more long-running operations by @stefanhaller in jesseduffield/lazygit#5765
* Remove the BLOCK_UI refresh mode by @stefanhaller in jesseduffield/lazygit#5790
* Support a `{{diffContext}}` template variable in external diff command by @stefanhaller in jesseduffield/lazygit#5841
* Some small UI polish by @stefanhaller in jesseduffield/lazygit#5853
* Auto-scroll when dragging to create range selection in staging view by @stefanhaller in jesseduffield/lazygit#5855
* Create a range selection in list views by dragging with the mouse by @stefanhaller in jesseduffield/lazygit#5856
* Reorder commits (or rebase todos) by dragging with the mouse by @stefanhaller in jesseduffield/lazygit#5857
* Rework the custom pager config (rename to diff renderer) by @stefanhaller in jesseduffield/lazygit#5870
* Show a Github PR's combined checks state in branches list (and main view for selected branch) by @stefanhaller in jesseduffield/lazygit#5874
### Fixes 🔧
* Fix stuck inline status when pushing/fetching by @stefanhaller in jesseduffield/lazygit#5768
* Escape the merge conflicts view before prompting to continue the rebase by @stefanhaller in jesseduffield/lazygit#5822
* Fix side panel rendering when branches/commits are not their panel's first tab by @stefanhaller in jesseduffield/lazygit#5825
* Suppress output from a few git commands that pollute the command log by @stefanhaller in jesseduffield/lazygit#5834
* Fix stall with ctrl+z and fg by @stefanhaller in jesseduffield/lazygit#5830
* Fix more problems related to concurrent repo switch and background refresh by @stefanhaller in jesseduffield/lazygit#5839
* Fix Windows crash when switching to fullscreen mode with a custom pager by @stefanhaller in jesseduffield/lazygit#5838
* Fix multi-selection of files with common prefix not working in commit files panel by @stefanhaller in jesseduffield/lazygit#5868
* Support absolute paths when detecting edit preset from EDITOR env var by @stefanhaller in jesseduffield/lazygit#5876
* Exclude more commit trailers from auto-wrapping by @stefanhaller in jesseduffield/lazygit#5871
* Prevent stale index.lock files from diffs rendered through a pty on Windows by @stefanhaller in jesseduffield/lazygit#5888
* Fix orphaned processes on Windows when quickly navigating between commits by @stefanhaller in jesseduffield/lazygit#5885
### Maintenance ⚙️
* Perform refresh model and view updates on the UI thread instead of using mutexes by @stefanhaller in jesseduffield/lazygit#5767
* Fix data race with status string by @stefanhaller in jesseduffield/lazygit#5777
* Fix data race with command log by @stefanhaller in jesseduffield/lazygit#5779
* Make integration tests using commits more robust by @stefanhaller in jesseduffield/lazygit#5782
* Synchronize ViewBufferManager.Close with a starting task by @stefanhaller in jesseduffield/lazygit#5786
* Make model<->view index conversions independent of rendering by @stefanhaller in jesseduffield/lazygit#5785
* Fix idle notification deadlock by @stefanhaller in jesseduffield/lazygit#5821
* Bump tcell to an unreleased snapshot to fix a shutdown race by @stefanhaller in jesseduffield/lazygit#5824
* Fix command log streaming race by @stefanhaller in jesseduffield/lazygit#5789
* Synchronize async view rendering by @stefanhaller in jesseduffield/lazygit#5791
* Run tests with race detection on CI by @stefanhaller in jesseduffield/lazygit#5792
* Gocui mouse event fixes by @stefanhaller in jesseduffield/lazygit#5854
* Move Github PR cache out of state.yml into a separate file by @stefanhaller in jesseduffield/lazygit#5884
* Make justfile commands available in the Nix development shell by @TyceHerrman in jesseduffield/lazygit#5890
### Docs 📖
* Clarify contribution policy by @stefanhaller in jesseduffield/lazygit#5809
### I18n 🌎
* Update translations from Crowdin by @stefanhaller in jesseduffield/lazygit#5891
### Performance Improvements 📊
* Make scrolling down a very long diff with the scroll wheel much smoother by @stefanhaller in jesseduffield/lazygit#5780

## New Contributors
* @TyceHerrman made their first contribution in jesseduffield/lazygit#5890

**Full Changelog**: jesseduffield/lazygit@v0.63.1...v0.64.0

</pre>
  <p>View the full release notes at <a href="https://github.com/jesseduffield/lazygit/releases/tag/v0.64.0">https://github.com/jesseduffield/lazygit/releases/tag/v0.64.0</a>.</p>
</details>
<hr>

See merge request: Harmonybrew/homebrew-core!15878
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant