The inexistence of the branch trying to be renamed wasn't checked and was left for 'rename_ref' to point out. It's better to do it explicitly as it leads to unconventional behaviour in the following case,
$ git branch -m foo master fatal: A branch named 'master' already exists. It's conventional to report that the 'foo' doesn't exist rather than repoting that 'master' exists, the same way the 'mv' command does. $ mv foo existing_file mv: cannot stat 'foo': No such file or directory Further, there's no way for 'master' being overwritten with 'foo', as it doesn't exist. Reporting the existence of 'master' is germane only when 'master' is *really* going to be overwritten. So, report the inexistence of the branch explicitly before reporting existence of new branch name to be consistent with it's counterpart, the widely used, the 'mv' command. Signed-off-by: Kaartic Sivaraam <kaarticsivaraam91...@gmail.com> --- I'm sending this patch as I didn't want to leave this thread open ended. I'm not yet sure if this is a good thing to do. This patch is open to comments, as the prvious ones I've sent have been. builtin/branch.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/builtin/branch.c b/builtin/branch.c index a3bd2262b..0a9112335 100644 --- a/builtin/branch.c +++ b/builtin/branch.c @@ -473,6 +473,10 @@ static void rename_branch(const char *oldname, const char *newname, int force) die(_("Invalid branch name: '%s'"), oldname); } + /* Check for existence of oldref before proceeding */ + if(!ref_exists(oldref.buf)) + die(_("Branch '%s' does not exist."), oldname); + /* * A command like "git branch -M currentbranch currentbranch" cannot * cause the worktree to become inconsistent with HEAD, so allow it. -- 2.13.2.23.g14d9f4c6d