Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> writes: > +test_expect_success REFFILES 'checkout a branch without refs/heads/* prefix' ' > + git clone --no-tags . repo-odd-prefix && > + ( > + cd repo-odd-prefix && > + > + cp .git/refs/remotes/origin/HEAD .git/refs/heads/a-branch && I already said that I do not think we want the exact behaviour (like "remote-tracking branches are moved when we change the local branch") to be cast in stone like this, but we should be able to lose the REFFILES prerequisite by using proper plumbing, e.g. these two lines origin=$(git symbolic-ref refs/remotes/origin/HEAD) && git symbolic-ref refs/heads/a-branch "$origin" && instead of the direct manipulation of filesystem with "cp". I am tempted to say that checking the command does not trigger BUG(), like the attached, may be sufficient. I do not care too deeply either way, though. diff --git i/t/t2018-checkout-branch.sh w/t/t2018-checkout-branch.sh index 93be1c0eae..5dda5ad4cb 100755 --- i/t/t2018-checkout-branch.sh +++ w/t/t2018-checkout-branch.sh @@ -85,6 +85,19 @@ test_expect_success 'setup' ' git branch -m branch1 ' +test_expect_success 'checkout a branch without refs/heads/* prefix' ' + git clone --no-tags . repo-odd-prefix && + ( + cd repo-odd-prefix && + + origin=$(git symbolic-ref refs/remotes/origin/HEAD) && + git symbolic-ref refs/heads/a-branch "$origin" && + + git checkout -f a-branch && + git checkout -f a-branch + ) +' + test_expect_success 'checkout -b to a new branch, set to HEAD' ' test_when_finished " git checkout branch1 &&