Since v3, two errors in 4/4 have been fixed: - "checkout -" must be done before "branch -d" - "branch -D" instead of "branch -d" because "shared" is a non-merged branch. Also, '||:' has been used to chain commands in the test_when_finished() block. Rubén Justo (4): worktree: introduce is_shared_symref() branch: fix die_if_checked_out() when ignore_current_worktree rebase: refuse to switch to a branch already checked out elsewhere (test) switch: reject if the branch is already checked out elsewhere (test) branch.c | 14 +++++++---- t/t2060-switch.sh | 29 ++++++++++++++++++++++ t/t3400-rebase.sh | 14 +++++++++++ worktree.c | 63 +++++++++++++++++++++++------------------------ worktree.h | 6 +++++ 5 files changed, 89 insertions(+), 37 deletions(-) Range-diff against v3: 1: 40b5ea54d3 = 1: 22d0944aad worktree: introduce is_shared_symref() 2: 2f1479b354 = 2: e7ba7b6fdd branch: fix die_if_checked_out() when ignore_current_worktree 3: 81a5b619c3 = 3: 8de8319d0e rebase: refuse to switch to a branch already checked out elsewhere (test) 4: 6559e58344 ! 4: 27d6ae2755 switch: reject if the branch is already checked out elsewhere (test) @@ t/t2060-switch.sh: test_expect_success 'tracking info copied with autoSetupMerge +test_expect_success 'switch back when temporarily detached and checked out elsewhere ' ' + test_when_finished " -+ git worktree remove wt1 && -+ git worktree remove wt2 && -+ git branch -d shared -+ git checkout - ++ git worktree remove wt1 ||: ++ git worktree remove wt2 ||: ++ git checkout - ||: ++ git branch -D shared ||: + " && + git checkout -b shared && + test_commit shared-first && -- 2.39.2