summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Johannes Schindelin <johannes.schindelin@gmx.de>2020-12-11 11:36:55 +0000
committerLibravatar Junio C Hamano <gitster@pobox.com>2020-12-13 15:53:50 -0800
commitcfaff3aac8063ec72f03c6761328c7fa44a15b34 (patch)
treec8fbd9daf268b486d048b26859af35fbafcc83c0
parentinit: document `init.defaultBranch` better (diff)
downloadtgif-cfaff3aac8063ec72f03c6761328c7fa44a15b34.tar.xz
branch -m: allow renaming a yet-unborn branch
In one of the next commits, we would like to give users some advice regarding the initial branch name, and how to modify it. To that end, it would be good if `git branch -m <name>` worked in a freshly initialized repository without any commits. Let's make it so. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-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