diff options
| author | Junio C Hamano <gitster@pobox.com> | 2023-03-19 15:03:11 -0700 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2023-03-19 15:03:11 -0700 |
| commit | c79786c486cb84e2f9dad41a04d982bb23075815 (patch) | |
| tree | 05d065c327325e03f31f306a4d05ea5cff9376d1 | |
| parent | Merge branch 'zh/push-to-delete-onelevel-ref' (diff) | |
| parent | bisect: fix "reset" when branch is checked out elsewhere (diff) | |
| download | git-c79786c486cb84e2f9dad41a04d982bb23075815.tar.gz git-c79786c486cb84e2f9dad41a04d982bb23075815.zip | |
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
| -rw-r--r-- | builtin/bisect.c | 3 | ||||
| -rwxr-xr-x | t/t6030-bisect-porcelain.sh | 23 |
2 files changed, 25 insertions, 1 deletions
diff --git a/builtin/bisect.c b/builtin/bisect.c index e8ee4a4dc8..c64c8d715a 100644 --- a/builtin/bisect.c +++ b/builtin/bisect.c @@ -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" diff --git a/t/t6030-bisect-porcelain.sh b/t/t6030-bisect-porcelain.sh index 3ba4fdf615..fb01bd6abc 100755 --- a/t/t6030-bisect-porcelain.sh +++ b/t/t6030-bisect-porcelain.sh @@ -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 && |
