pr-2126/sluongng/sl/rebase-update-refs-symrefs-v3
tagged this
22 Jul 08:15
git rebase --update-refs can finish rewriting the current branch and then fail while updating a local branch that is a symbolic ref. This can happen during a default-branch rename where refs/heads/main points at refs/heads/master while users migrate. The failure leaves refs partially updated even though the main rebase has succeeded. Resolve local branch decorations before adding update-ref commands. The first patch skips aliases whose targets are other branches and preserves the existing handling of the current branch. The second patch keeps aliases to non-branch refs supported while preventing duplicate and cross-worktree updates to their resolved targets. Changes since v2: * Skip branch-to-branch symrefs before checked-out handling. * Restore the unconditional current-branch skip and keep an owned copy of the resolved HEAD name. * Check both a non-branch symref alias and its resolved target against checked-out reservations. * Deduplicate aliases that share a non-branch target. * Reserve resolved targets from other worktrees' in-progress update-refs state. * Split the branch-alias fix and non-branch safeguards into separate patches. * Rebase onto 48bbf81c29 (The 5th batch). The focused t3400 and t3404 test suites pass with both the files and reftable backends. Son Luong Ngoc (2): rebase: skip branch symref aliases rebase: guard non-branch symref targets branch.c | 15 ++++++ sequencer.c | 63 ++++++++++++++++++++----- t/t3400-rebase.sh | 2 +- t/t3404-rebase-interactive.sh | 88 +++++++++++++++++++++++++++++++++++ 4 files changed, 155 insertions(+), 13 deletions(-) base-commit: 48bbf81c29ca9a4479ec7850fe206518682cdb2f Submitted-As: https://lore.kernel.org/git/pull.2126.v3.git.1784708107.gitgitgadget@gmail.com In-Reply-To: https://lore.kernel.org/git/pull.2126.git.1779946921.gitgitgadget@gmail.com In-Reply-To: https://lore.kernel.org/git/pull.2126.v2.git.1780482436865.gitgitgadget@gmail.com