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 problem, 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); reject_rebase_or_bisect_branch(oldref.buf); -- Kaartic