From: "Harald Nordgren via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Kristoffer Haugsbakk <kristofferhaugsbakk@fastmail.com>,
"D. Ben Knoble" <ben.knoble@gmail.com>,
Phillip Wood <phillip.wood123@gmail.com>,
Jasper Mayone <me@jaspermayone.com>,
Harald Nordgren <haraldnordgren@gmail.com>,
Harald Nordgren <haraldnordgren@gmail.com>
Subject: [PATCH v6 2/4] branch: let delete_branches() name where a branch landed
Date: Sun, 01 Nov 2026 08:22:09 +0000 [thread overview]
Message-ID: <9858c8c81e9c58bcd5d3dc55c65bbc70129a55c4.1793521331.git.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.2425.v6.git.git.1793521331.gitgitgadget@gmail.com>
From: Harald Nordgren <haraldnordgren@gmail.com>
A later commit lets "git branch" delete branches whose commits are not
in their upstream but whose changes are, such as after a squash merge.
Their tips are not reachable from the upstream, so the merge check in
delete_branches() would refuse to delete them, and the output should
say where their changes went.
Let delete_branches() take a map from branch names to the upstream
commit where each branch landed. A branch in the map skips the merge
check and is reported as
Deleted branch topic (was 1a2b3c4, landed as 9f8e7d6).
No caller passes a map yet, so there is no change in behavior.
Signed-off-by: Harald Nordgren <haraldnordgren@gmail.com>
---
builtin/branch.c | 30 +++++++++++++++++++++++++-----
1 file changed, 25 insertions(+), 5 deletions(-)
diff --git a/builtin/branch.c b/builtin/branch.c
index 171b13b081..99b0dd45e9 100644
--- a/builtin/branch.c
+++ b/builtin/branch.c
@@ -236,7 +236,7 @@ static void delete_branch_config(const char *branchname)
}
static int delete_branches(int argc, const char **argv, int kinds,
- unsigned int flags)
+ unsigned int flags, struct strmap *landed_commits)
{
struct commit *head_rev = NULL;
struct object_id oid;
@@ -334,6 +334,8 @@ static int delete_branches(int argc, const char **argv, int kinds,
}
if (!(ref_flags & (REF_ISSYMREF|REF_ISBROKEN)) &&
+ !(landed_commits &&
+ strmap_contains(landed_commits, bname.buf)) &&
check_branch_commit(bname.buf, name, &oid, head_rev, kinds,
flags)) {
if (!(flags & DELETE_BRANCH_SKIP_UNMERGED))
@@ -357,15 +359,33 @@ static int delete_branches(int argc, const char **argv, int kinds,
for_each_string_list_item(item, &refs_to_delete) {
char *describe_ref = item->util;
char *name = item->string;
+ struct commit *landed = landed_commits ?
+ strmap_get(landed_commits, name + branch_name_pos) : NULL;
+ const char *landed_abbrev = landed ?
+ repo_find_unique_abbrev(the_repository,
+ &landed->object.oid,
+ DEFAULT_ABBREV) : NULL;
+
if (flags & DELETE_BRANCH_DRY_RUN) {
- if (!(flags & DELETE_BRANCH_QUIET))
+ if (flags & DELETE_BRANCH_QUIET)
+ ;
+ else if (landed)
+ printf(_("Would delete branch %s (was %s, landed as %s).\n"),
+ name + branch_name_pos, describe_ref,
+ landed_abbrev);
+ else
printf(remote_branch
? _("Would delete remote-tracking branch %s (was %s).\n")
: _("Would delete branch %s (was %s).\n"),
name + branch_name_pos, describe_ref);
} else if (!refs_ref_exists(get_main_ref_store(the_repository), name)) {
char *refname = name + branch_name_pos;
- if (!(flags & DELETE_BRANCH_QUIET))
+ if (flags & DELETE_BRANCH_QUIET)
+ ;
+ else if (landed)
+ printf(_("Deleted branch %s (was %s, landed as %s).\n"),
+ refname, describe_ref, landed_abbrev);
+ else
printf(remote_branch
? _("Deleted remote-tracking branch %s (was %s).\n")
: _("Deleted branch %s (was %s).\n"),
@@ -901,7 +921,7 @@ static int delete_merged_branches(const struct strvec *upstreams,
FILTER_REFS_BRANCHES,
DELETE_BRANCH_SKIP_UNMERGED |
DELETE_BRANCH_NO_HEAD_FALLBACK |
- flags);
+ flags, NULL);
if (!ret && !(flags & DELETE_BRANCH_DRY_RUN))
clear_deleted_upstreams(&protected_branch_names,
@@ -1141,7 +1161,7 @@ int cmd_branch(int argc,
die(_("branch name required"));
ret = delete_branches(argc, argv, filter.kind,
(delete > 1 ? DELETE_BRANCH_FORCE : 0) |
- (quiet ? DELETE_BRANCH_QUIET : 0));
+ (quiet ? DELETE_BRANCH_QUIET : 0), NULL);
goto out;
} else if (delete_merged.nr) {
ret = delete_merged_branches(&delete_merged, argv,
--
gitgitgadget
next prev parent reply other threads:[~2026-11-01 8:22 UTC|newest]
Thread overview: 84+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-29 7:30 [PATCH] branch: let --delete-merged find squash merged branches Harald Nordgren via GitGitGadget
2026-09-29 7:46 ` Kristoffer Haugsbakk
2026-09-29 7:52 ` Harald Nordgren
2026-09-29 8:08 ` Kristoffer Haugsbakk
2026-09-29 11:18 ` D. Ben Knoble
2026-09-29 13:31 ` Kristoffer Haugsbakk
2026-09-29 11:26 ` D. Ben Knoble
2026-09-29 13:44 ` Harald Nordgren
2026-09-29 13:52 ` Harald Nordgren
2026-09-29 15:28 ` D. Ben Knoble
2026-09-29 18:34 ` Harald Nordgren
2026-10-04 9:54 ` Phillip Wood
2026-10-04 22:28 ` Harald Nordgren
2026-10-08 15:25 ` Phillip Wood
2026-10-08 18:42 ` Harald Nordgren
2026-10-09 8:16 ` Kristoffer Haugsbakk
2026-10-09 11:11 ` Harald Nordgren
2026-10-09 11:18 ` Harald Nordgren
2026-10-09 13:40 ` Phillip Wood
2026-10-09 13:37 ` Phillip Wood
2026-10-09 15:27 ` Harald Nordgren
2026-10-08 17:51 ` D. Ben Knoble
2026-10-09 13:34 ` Phillip Wood
2026-10-11 9:41 ` [PATCH v2 0/2] " Harald Nordgren via GitGitGadget
2026-10-11 9:41 ` [PATCH v2 1/2] " Harald Nordgren via GitGitGadget
2026-10-11 9:41 ` [PATCH v2 2/2] branch: add --no-squashed to skip the squash search Harald Nordgren via GitGitGadget
2026-10-12 0:30 ` [PATCH v2 0/2] branch: let --delete-merged find squash merged branches Junio C Hamano
2026-10-12 9:50 ` Phillip Wood
2026-10-12 14:31 ` Harald Nordgren
2026-10-12 16:50 ` Junio C Hamano
2026-10-12 17:44 ` Harald Nordgren
2026-10-13 2:23 ` Junio C Hamano
2026-10-17 22:23 ` Harald Nordgren
2026-10-19 4:40 ` Jasper Mayone
2026-10-18 15:09 ` Harald Nordgren
2026-10-12 12:41 ` Harald Nordgren
2026-10-12 15:49 ` D. Ben Knoble
2026-10-21 12:28 ` [PATCH v3 0/3] " Harald Nordgren via GitGitGadget
2026-10-21 12:28 ` [PATCH v3 1/3] branch: move the deleteMerged opt-out check into a helper Harald Nordgren via GitGitGadget
2026-10-21 12:28 ` [PATCH v3 2/3] branch: let --delete-merged find rebase merged branches Harald Nordgren via GitGitGadget
2026-10-21 12:28 ` [PATCH v3 3/3] branch: add --squashed to find squash " Harald Nordgren via GitGitGadget
2026-10-21 17:35 ` [PATCH v3 0/3] branch: let --delete-merged " Jasper Mayone
2026-10-21 18:51 ` Harald Nordgren
2026-10-22 12:55 ` D. Ben Knoble
2026-10-22 14:41 ` Harald Nordgren
2026-10-22 5:49 ` Junio C Hamano
2026-10-22 7:18 ` Harald Nordgren
2026-10-22 16:33 ` Junio C Hamano
2026-10-22 16:57 ` Junio C Hamano
2026-10-22 17:31 ` Harald Nordgren
2026-10-22 17:44 ` Jasper Mayone
2026-10-22 17:56 ` Junio C Hamano
2026-10-23 9:07 ` Harald Nordgren
2026-10-22 17:44 ` Harald Nordgren
2026-10-22 12:59 ` D. Ben Knoble
2026-10-26 8:33 ` [PATCH v4 0/4] " Harald Nordgren via GitGitGadget
2026-10-26 8:33 ` [PATCH v4 1/4] branch: move the deleteMerged opt-out check into a helper Harald Nordgren via GitGitGadget
2026-10-26 8:33 ` [PATCH v4 2/4] branch: let delete_branches() name where a branch landed Harald Nordgren via GitGitGadget
2026-10-26 8:33 ` [PATCH v4 3/4] branch: add --delete-integrated to delete rebase and squash merged branches Harald Nordgren via GitGitGadget
2026-10-26 8:33 ` [PATCH v4 4/4] branch: let --delete-integrated find branches merged onto changed files Harald Nordgren via GitGitGadget
2026-10-29 4:30 ` [PATCH v4 0/4] branch: let --delete-merged find squash merged branches Jasper Mayone
2026-10-29 8:30 ` Harald Nordgren
2026-10-30 10:52 ` [PATCH v5 " Harald Nordgren via GitGitGadget
2026-10-30 10:52 ` [PATCH v5 1/4] branch: move the deleteMerged opt-out check into a helper Harald Nordgren via GitGitGadget
2026-10-30 10:53 ` [PATCH v5 2/4] branch: let delete_branches() name where a branch landed Harald Nordgren via GitGitGadget
2026-10-30 10:53 ` [PATCH v5 3/4] branch: add --delete-integrated to delete rebase and squash merged branches Harald Nordgren via GitGitGadget
2026-10-30 19:14 ` Junio C Hamano
2026-10-31 8:09 ` Harald Nordgren
2026-10-30 10:53 ` [PATCH v5 4/4] branch: let --delete-integrated find branches merged onto changed files Harald Nordgren via GitGitGadget
2026-10-30 19:25 ` Junio C Hamano
2026-10-31 8:10 ` Harald Nordgren
2026-11-01 8:22 ` [PATCH v6 0/4] branch: let --delete-merged find squash merged branches Harald Nordgren via GitGitGadget
2026-11-01 8:22 ` [PATCH v6 1/4] branch: move the deleteMerged opt-out check into a helper Harald Nordgren via GitGitGadget
2026-11-01 8:22 ` Harald Nordgren via GitGitGadget [this message]
2026-11-01 8:22 ` [PATCH v6 3/4] branch: add --delete-integrated to delete rebase and squash merged branches Harald Nordgren via GitGitGadget
2026-11-01 8:22 ` [PATCH v6 4/4] branch: let --delete-integrated find branches merged onto changed files Harald Nordgren via GitGitGadget
2026-11-11 8:30 ` Harald Nordgren
2026-11-11 15:27 ` Jasper Mayone
2026-11-14 11:08 ` Harald Nordgren
2026-11-14 13:24 ` [PATCH v7 0/4] branch: let --delete-merged find squash merged branches Harald Nordgren via GitGitGadget
2026-11-14 13:24 ` [PATCH v7 1/4] branch: move the deleteMerged opt-out check into a helper Harald Nordgren via GitGitGadget
2026-11-14 13:24 ` [PATCH v7 2/4] branch: let delete_branches() name where a branch landed Harald Nordgren via GitGitGadget
2026-11-14 13:24 ` [PATCH v7 3/4] branch: add --delete-integrated to delete rebase and squash merged branches Harald Nordgren via GitGitGadget
2026-11-14 13:24 ` [PATCH v7 4/4] branch: let --delete-integrated find branches merged onto changed files Harald Nordgren via GitGitGadget
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=9858c8c81e9c58bcd5d3dc55c65bbc70129a55c4.1793521331.git.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=ben.knoble@gmail.com \
--cc=git@vger.kernel.org \
--cc=haraldnordgren@gmail.com \
--cc=kristofferhaugsbakk@fastmail.com \
--cc=me@jaspermayone.com \
--cc=phillip.wood123@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.