summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--builtin/branch.c4
-rwxr-xr-xt/t0001-init.sh8
2 files changed, 11 insertions, 1 deletions
diff --git a/builtin/branch.c b/builtin/branch.c
index efb30b8820..200da319f1 100644
--- a/builtin/branch.c
+++ b/builtin/branch.c
@@ -538,7 +538,9 @@ static void copy_or_rename_branch(const char *oldname, const char *newname, int
strbuf_addf(&logmsg, "Branch: renamed %s to %s",
oldref.buf, newref.buf);
- if (!copy && rename_ref(oldref.buf, newref.buf, logmsg.buf))
+ if (!copy &&
+ (!head || strcmp(oldname, head) || !is_null_oid(&head_oid)) &&
+ rename_ref(oldref.buf, newref.buf, logmsg.buf))
die(_("Branch rename failed"));
if (copy && copy_existing_ref(oldref.buf, newref.buf, logmsg.buf))
die(_("Branch copy failed"));
diff --git a/t/t0001-init.sh b/t/t0001-init.sh
index 69a320489f..bb23e56a16 100755
--- a/t/t0001-init.sh
+++ b/t/t0001-init.sh
@@ -571,4 +571,12 @@ test_expect_success 'invalid default branch name' '
test_i18ngrep "invalid branch name" err
'
+test_expect_success 'branch -m with the initial branch' '
+ git init rename-initial &&
+ git -C rename-initial branch -m renamed &&
+ test renamed = $(git -C rename-initial symbolic-ref --short HEAD) &&
+ git -C rename-initial branch -m renamed again &&
+ test again = $(git -C rename-initial symbolic-ref --short HEAD)
+'
+
test_done