git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v5 2/4] branch -m: allow renaming a yet-unborn branch

From
Johannes Schindelin via GitGitGadget <gitgitgadget@gmail.com>
Date
Dec 11, 2020, 11:36 UTC
Message-ID
<ac7b352a0ba604f9b10a5a5ce5487d1002169443.1607686618.git.gitgitgadget@gmail.com>
In-Reply-To
<pull.921.v5.git.git.1607686618.gitgitgadget@gmail.com>
From: Johannes Schindelin <johannes.schindelin@gmx.de>

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>
---
 builtin/branch.c | 4 +++-
 t/t0001-init.sh  | 8 ++++++++
 2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/builtin/branch.c b/builtin/branch.c
index efb30b88206..200da319f1d 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 69a320489fc..bb23e56a165 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
-- 
gitgitgadget
Previous: Johannes Schindelin via GitGitGadgetNext: Johannes Schindelin via GitGitGadget
Message 51 of 57 in “Add helpful advice about init.defaultBranch”
  1. 0/3 Add helpful advice about init.defaultBranchJohannes Schindelin via GitGitGadget, Nov 22, 2020
  2. 2/3 get_default_branch_name(): prepare for showing some adviceJohannes Schindelin via GitGitGadget, Nov 22, 2020
  3. 1/3 init: document `init.defaultBranch` betterJohannes Schindelin via GitGitGadget, Nov 22, 2020
  4. Junio C HamanoNov 22, 2020
  5. Johannes SchindelinNov 23, 2020
  6. 3/3 init: provide useful advice about init.defaultBranchJohannes Schindelin via GitGitGadget, Nov 22, 2020
  7. Junio C HamanoNov 22, 2020
  8. Junio C HamanoNov 23, 2020
  9. Johannes SchindelinNov 23, 2020
  10. Junio C HamanoNov 23, 2020
  11. Johannes SchindelinNov 23, 2020
  12. Junio C HamanoNov 23, 2020
  13. Johannes SchindelinNov 23, 2020
  14. Philip OakleyNov 23, 2020
  15. Johannes SchindelinNov 23, 2020
  16. 0/4 Add helpful advice about init.defaultBranchJohannes Schindelin via GitGitGadget, Nov 23, 2020
  17. 1/4 init: document `init.defaultBranch` betterJohannes Schindelin via GitGitGadget, Nov 23, 2020
  18. 3/4 get_default_branch_name(): prepare for showing some adviceJohannes Schindelin via GitGitGadget, Nov 23, 2020
  19. 2/4 branch -m: allow renaming a yet-unborn branchJohannes Schindelin via GitGitGadget, Nov 23, 2020
  20. Junio C HamanoNov 23, 2020
  21. Johannes SchindelinNov 24, 2020
  22. Junio C HamanoNov 24, 2020
  23. 4/4 init: provide useful advice about init.defaultBranchJohannes Schindelin via GitGitGadget, Nov 23, 2020
  24. Junio C HamanoNov 23, 2020
  25. Johannes SchindelinNov 24, 2020
  26. Junio C HamanoNov 24, 2020
  27. Johannes SchindelinDec 9, 2020
  28. Junio C HamanoDec 9, 2020
  29. Johannes SchindelinDec 10, 2020
  30. Junio C HamanoDec 10, 2020
  31. Felipe ContrerasDec 10, 2020
  32. 0/4 Add helpful advice about init.defaultBranchJohannes Schindelin via GitGitGadget, Nov 24, 2020
  33. 1/4 init: document `init.defaultBranch` betterJohannes Schindelin via GitGitGadget, Nov 24, 2020
  34. 4/4 init: provide useful advice about init.defaultBranchJohannes Schindelin via GitGitGadget, Nov 24, 2020
  35. 2/4 branch -m: allow renaming a yet-unborn branchJohannes Schindelin via GitGitGadget, Nov 24, 2020
  36. 3/4 get_default_branch_name(): prepare for showing some adviceJohannes Schindelin via GitGitGadget, Nov 24, 2020
  37. 0/4 Add helpful advice about init.defaultBranchJohannes Schindelin via GitGitGadget, Dec 10, 2020
  38. 4/4 init: provide useful advice about init.defaultBranchJohannes Schindelin via GitGitGadget, Dec 10, 2020
  39. Felipe ContrerasDec 11, 2020
  40. Junio C HamanoDec 11, 2020
  41. Felipe ContrerasDec 11, 2020
  42. Johannes SchindelinDec 11, 2020
  43. 2/4 branch -m: allow renaming a yet-unborn branchJohannes Schindelin via GitGitGadget, Dec 10, 2020
  44. 1/4 init: document `init.defaultBranch` betterJohannes Schindelin via GitGitGadget, Dec 10, 2020
  45. Felipe ContrerasDec 11, 2020
  46. Junio C HamanoDec 11, 2020
  47. Felipe ContrerasDec 11, 2020
  48. Junio C HamanoDec 11, 2020
  49. 3/4 get_default_branch_name(): prepare for showing some adviceJohannes Schindelin via GitGitGadget, Dec 10, 2020
  50. 0/4 Add helpful advice about init.defaultBranchJohannes Schindelin via GitGitGadget, Dec 11, 2020
  51. 2/4 branch -m: allow renaming a yet-unborn branchJohannes Schindelin via GitGitGadget, Dec 11, 2020
  52. 1/4 init: document `init.defaultBranch` betterJohannes Schindelin via GitGitGadget, Dec 11, 2020
  53. 3/4 get_default_branch_name(): prepare for showing some adviceJohannes Schindelin via GitGitGadget, Dec 11, 2020
  54. 4/4 init: provide useful advice about init.defaultBranchJohannes Schindelin via GitGitGadget, Dec 11, 2020
  55. SZEDER GáborFeb 2, 2021
  56. Junio C HamanoFeb 2, 2021
  57. SZEDER GáborFeb 3, 2021

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.