Merge branch 'rj/bisect-already-used-branch'

Allow "git bisect reset" to check out the original branch when the
branch is already checked out in a different worktree linked to the
same repository.

* rj/bisect-already-used-branch:
  bisect: fix "reset" when branch is checked out elsewhere
This commit is contained in:
Junio C Hamano 2023-03-19 15:03:11 -07:00
commit c79786c486
2 changed files with 25 additions and 1 deletions

View File

@ -245,7 +245,8 @@ static int bisect_reset(const char *commit)
struct child_process cmd = CHILD_PROCESS_INIT;
cmd.git_cmd = 1;
strvec_pushl(&cmd.args, "checkout", branch.buf, "--", NULL);
strvec_pushl(&cmd.args, "checkout", "--ignore-other-worktrees",
branch.buf, "--", NULL);
if (run_command(&cmd)) {
error(_("could not check out original"
" HEAD '%s'. Try 'git bisect"

View File

@ -122,6 +122,29 @@ test_expect_success 'bisect start without -- takes unknown arg as pathspec' '
grep bar ".git/BISECT_NAMES"
'
test_expect_success 'bisect reset: back in a branch checked out also elsewhere' '
echo "shared" > branch.expect &&
test_bisect_reset() {
git -C $1 bisect start &&
git -C $1 bisect good $HASH1 &&
git -C $1 bisect bad $HASH3 &&
git -C $1 bisect reset &&
git -C $1 branch --show-current > branch.output &&
cmp branch.expect branch.output
} &&
test_when_finished "
git worktree remove wt1 &&
git worktree remove wt2 &&
git branch -d shared
" &&
git worktree add wt1 -b shared &&
git worktree add wt2 -f shared &&
# we test in both worktrees to ensure that works
# as expected with "first" and "next" worktrees
test_bisect_reset wt1 &&
test_bisect_reset wt2
'
test_expect_success 'bisect reset: back in the main branch' '
git bisect reset &&
echo "* main" > branch.expect &&