On Thu, Oct 05, 2017 at 07:25:52PM +0200, Andreas Krey wrote: > I got something that looks like a regression somewhere since 2.11. > This script > > set -xe > rm -rf repo > git init repo > cd repo > git commit -m nix --allow-empty > git branch -m master/master > git rev-parse HEAD > git branch > git status > > causes .git/HEAD to still contain 'ref: refs/heads/master' and to fail > in the rev-parse step with > > + git rev-parse HEAD > HEAD > fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree. > Use '--' to separate paths from revisions, like this: > 'git <command> [<revision>...] -- [<file>...]' > > This is with 2.15.0.rc0; with 2.11.0 (and 2.11.0.356.gffac48d09) it still works. So this turned out to be quite an interesting bug to explore. I think the solution I ended up with in the second patch is the right thing. I'm adding Michael to the cc for wisdom on the ref code, though I think the bug I'm fixing actually goes back to the early days of Git. Earlier I blamed Duy's 31824d180d. And that is the start of the regression in v2.15, but only because it fixed another bug which was papering over the one I'm fixing here. :) [v1 1/2]: t3308: create a real ref directory/file conflict [v1 2/2]: refs_resolve_ref_unsafe: handle d/f conflicts for writes refs.c | 15 ++++++++++++++- t/t1401-symbolic-ref.sh | 26 +++++++++++++++++++++++++- t/t3200-branch.sh | 10 ++++++++++ t/t3308-notes-merge.sh | 2 +- 4 files changed, 50 insertions(+), 3 deletions(-) -Peff