Skip to content

v1.41.0

Choose a tag to compare

@VictorQuilgars VictorQuilgars released this 02 Nov 15:57
24d7907

Fixed

  • Reword, squash, fixup, drop and move work on Windows. Every rewrite is a git rebase -i with 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 to sh, and on Windows the path arrived with backslashes, which sh swallows — C:\Users\…\Temp\gitgui-rebase-editor-….sh was looked for as C:Users…Tempgitgui-rebase-editor-….sh and not found, so the rebase stopped before it began. The paths now reach the shell with forward slashes and quoted, and the scripts run through sh rather 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 : replaces true, which is not on every Windows PATH.
  • Continue no longer throws away a commit it could not make. When git rebase --continue failed with nothing left in conflict, the app took the commit for an empty one and ran rebase --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 .git is 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.