Web lists-archives.com

Re: "Branch exists" error while trying to rename a non-existing branch to an existing one

On Sun, 2017-07-09 at 11:57 -0700, Junio C Hamano wrote:
> This is borderline "meh" at least to me.  An argument against a
> hypothetical version of Git that "fixes" your issue would be that no
> matter what the source of renaming is, as long as 'master' exists,
> "branch -m" shouldn't overwrite it, and it is a good thing to remind
> the user that 'master' exists and the user meant to rename it to
> something else.
I'm not against the fact of reminding the user about an existing
branch. I'm with the fact that, warn him when he really has to care
about a branch being overwritten i.e., when he tries to rename an
"existing" branch to one that refers to another existing branch.

I found this behaviour odd as I try to relate it with the 'mv' command.
It's behaviour is as follows,

    $ ls
    file  some_file
    $ mv nothing file
    mv: cannot stat 'nothing': No such file or directory

If I haven't missed anything the following patch seems to fix the

diff --git a/builtin/branch.c b/builtin/branch.c
index 48a513a84..2869aaca8 100644
--- a/builtin/branch.c
+++ b/builtin/branch.c
@@ -476,7 +476,10 @@ static void rename_branch(const char *oldname, const char *newname, int force)
        clobber_head_ok = !strcmp(oldname, newname);
-       validate_new_branchname(newname, &newref, force, clobber_head_ok);
+       if(ref_exists(oldref.buf))
+               validate_new_branchname(newname, &newref, force, clobber_head_ok);
+       else
+               die(_("Branch '%s' does not exist."), oldname);