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

[PATCH] branch: implement shortcut to delete last branch

From
AGAaron Greenberg <p@aaronjgreenberg.com>
Date
Mar 27, 2018, 18:46 UTC
Message-ID
<1522176390-646-2-git-send-email-p@aaronjgreenberg.com>
In-Reply-To
<1522176390-646-1-git-send-email-p@aaronjgreenberg.com>

This patch gives git-branch the ability to delete the previous checked-out branch using the "-" shortcut. This shortcut already exists for git-checkout, git-merge, and git-revert. A common workflow is

1. Do some work on a local topic-branch and push it to a remote.
2. 'remote/topic-branch' gets merged in to 'remote/master'.
3. Switch back to local master and fetch 'remote/master'.
4. Delete previously checked-out local topic-branch.

$ git checkout -b topic-a $ # Do some work... $ git commit -am "Implement feature A" $ git push origin topic-a

$ git checkout master $ git branch -d topic-a $ # With this patch, a user could simply type $ git branch -d -

"-" is a useful shortcut for cleaning up a just-merged branch (or a just switched-from branch.)

Signed-off-by: Aaron Greenberg <p@aaronjgreenberg.com>
---
 builtin/branch.c  | 3 +++
 t/t3200-branch.sh | 8 ++++++++
 2 files changed, 11 insertions(+)
diff --git a/builtin/branch.c b/builtin/branch.c
index 6d0cea9..9e37078 100644
--- a/builtin/branch.c
+++ b/builtin/branch.c
@@ -221,6 +221,9 @@ static int delete_branches(int argc, const char **argv, int force, int kinds,
 		char *target = NULL;
 		int flags = 0;
 
+		if (!strcmp(argv[i], "-"))
+			argv[i] = "@{-1}";
+
 		strbuf_branchname(&bname, argv[i], allowed_interpret);
 		free(name);
 		name = mkpathdup(fmt, bname.buf);
diff --git a/t/t3200-branch.sh b/t/t3200-branch.sh
index 6c0b7ea..78c25aa 100755
--- a/t/t3200-branch.sh
+++ b/t/t3200-branch.sh
@@ -776,6 +776,14 @@ test_expect_success 'deleting currently checked out branch fails' '
 	test_must_fail git branch -d my7
 '
 
+test_expect_success 'test deleting last branch' '
+	git checkout -b my7.1 &&
+	git checkout  - &&
+	test_path_is_file .git/refs/heads/my7.1 &&
+	git branch -d - &&
+	test_path_is_missing .git/refs/heads/my7.1
+'
+
 test_expect_success 'test --track without .fetch entries' '
 	git branch --track my8 &&
 	test "$(git config branch.my8.remote)" &&
-- 
2.7.4
Previous: Aaron GreenbergNext: Jonathan Nieder
Message 2 of 5 in “branch: implement shortcut to delete last branch”
  1. branch: implement shortcut to delete last branchAaron Greenberg, Mar 27, 2018
  2. branch: implement shortcut to delete last branchAaron Greenberg, Mar 27, 2018
  3. Jonathan NiederMar 27, 2018
  4. Ævar Arnfjörð BjarmasonMar 27, 2018
  5. Ævar Arnfjörð BjarmasonMar 27, 2018

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.