public inbox for git@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] status: show default branch comparison when tracking non-default branch
@ 2025-12-23  0:53 Harald Nordgren via GitGitGadget
  2025-12-23  5:32 ` Junio C Hamano
                   ` (2 more replies)
  0 siblings, 3 replies; 260+ messages in thread
From: Harald Nordgren via GitGitGadget @ 2025-12-23  0:53 UTC (permalink / raw)
  To: git; +Cc: Harald Nordgren, Harald Nordgren

From: Harald Nordgren <haraldnordgren@gmail.com>

When a branch tracks a non-default remote branch (e.g.,
origin/feature), git status now also displays how the branch
compares to the default branch (origin/main or upstream/main).
This helps users understand if their branch has drifted from the
main development line even when it's in sync with its tracking
branch.

The comparison is shown as a separate line after the tracking
branch status:
- "Ahead of 'origin/main' by N commits" when purely ahead
- "Behind 'origin/main' by N commits" when purely behind
- "Diverged from 'origin/main' by N commits" when diverged

Example output when tracking a feature branch:

    On branch feature
    Your branch is ahead of 'origin/feature' by 2 commits.
      (use "git push" to publish your local commits)

    Ahead of 'origin/main' by 5 commits.

The default branch is determined dynamically by checking:
1. refs/remotes/upstream/HEAD (if upstream remote exists)
2. refs/remotes/origin/HEAD (fallback)

This works with any default branch name (main, master, develop,
etc.) as long as the symbolic ref is configured. The comparison
is also shown when the branch is up-to-date with its tracking
branch but differs from the default branch.

Signed-off-by: Harald Nordgren <haraldnordgren@gmail.com>
---
    status: show default branch comparison when tracking non-default branch
    
    When a branch tracks a non-default remote branch (e.g., origin/feature),
    git status now also displays how the branch compares to the default
    branch (origin/main or upstream/main). This helps users understand if
    their branch has drifted from the main development line even when it's
    in sync with its tracking branch.
    
    The comparison is shown as a separate line after the tracking branch
    status:
    
     * "Ahead of 'origin/main' by N commits" when purely ahead
     * "Behind 'origin/main' by N commits" when purely behind
     * "Diverged from 'origin/main' by N commits" when diverged
    
    The default branch is determined dynamically by checking:
    
     1. refs/remotes/upstream/HEAD (if upstream remote exists)
     2. refs/remotes/origin/HEAD (fallback)
    
    This works with any default branch name (main, master, develop, etc.) as
    long as the symbolic ref is configured. The comparison is also shown
    when the branch is up-to-date with its tracking branch but differs from
    the default branch.

Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-2138%2FHaraldNordgren%2Fahead_of_main_status-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-2138/HaraldNordgren/ahead_of_main_status-v1
Pull-Request: https://github.com/git/git/pull/2138

 remote.c                 | 101 ++++++++++++++++
 t/t6040-tracking-info.sh | 246 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 347 insertions(+)

diff --git a/remote.c b/remote.c
index 59b3715120..9be5e5aa22 100644
--- a/remote.c
+++ b/remote.c
@@ -2237,6 +2237,95 @@ int stat_tracking_info(struct branch *branch, int *num_ours, int *num_theirs,
 	return stat_branch_pair(branch->refname, base, num_ours, num_theirs, abf);
 }
 
+static const char *get_default_remote_ref(char **full_ref_out)
+{
+	int flag;
+	const char *resolved;
+	static const char *remotes[] = { "upstream", "origin", NULL };
+	int i;
+
+	for (i = 0; remotes[i]; i++) {
+		struct strbuf head_ref = STRBUF_INIT;
+		strbuf_addf(&head_ref, "refs/remotes/%s/HEAD", remotes[i]);
+
+		resolved = refs_resolve_ref_unsafe(
+			get_main_ref_store(the_repository),
+			head_ref.buf,
+			RESOLVE_REF_READING,
+			NULL, &flag);
+
+		strbuf_release(&head_ref);
+
+		if (resolved && (flag & REF_ISSYMREF)) {
+			if (full_ref_out)
+				*full_ref_out = xstrdup(resolved);
+			return refs_shorten_unambiguous_ref(
+				get_main_ref_store(the_repository), resolved, 0);
+		}
+	}
+
+	return NULL;
+}
+
+static int is_default_remote_branch(const char *name)
+{
+	char *default_full = NULL;
+	const char *default_short;
+	int result = 0;
+
+	default_short = get_default_remote_ref(&default_full);
+	if (!default_short)
+		return 0;
+
+	result = !strcmp(name, default_short);
+
+	free(default_full);
+	return result;
+}
+
+static void format_default_branch_comparison(struct strbuf *sb,
+					     const char *branch_refname,
+					     enum ahead_behind_flags abf)
+{
+	int default_ours = 0, default_theirs = 0;
+	char *default_full = NULL;
+	const char *default_short;
+
+	default_short = get_default_remote_ref(&default_full);
+	if (!default_short)
+		return;
+
+	if (stat_branch_pair(branch_refname, default_full,
+			     &default_ours, &default_theirs, abf) <= 0) {
+		free(default_full);
+		return;
+	}
+
+	strbuf_addstr(sb, "\n");
+
+	if (default_ours > 0 && default_theirs == 0) {
+		strbuf_addf(sb,
+			Q_("Ahead of '%s' by %d commit.\n",
+			   "Ahead of '%s' by %d commits.\n",
+			   default_ours),
+			default_short, default_ours);
+	} else if (default_theirs > 0 && default_ours == 0) {
+		strbuf_addf(sb,
+			Q_("Behind '%s' by %d commit.\n",
+			   "Behind '%s' by %d commits.\n",
+			   default_theirs),
+			default_short, default_theirs);
+	} else if (default_ours > 0 && default_theirs > 0) {
+		strbuf_addf(sb,
+			Q_("Diverged from '%s' by %d commit.\n",
+			   "Diverged from '%s' by %d commits.\n",
+			   default_ours + default_theirs),
+			default_short, default_ours + default_theirs);
+	}
+
+	free(default_full);
+}
+
 /*
  * Return true when there is anything to report, otherwise false.
  */
@@ -2248,6 +2337,7 @@ int format_tracking_info(struct branch *branch, struct strbuf *sb,
 	const char *full_base;
 	char *base;
 	int upstream_is_gone = 0;
+	int show_default_branch_comparison;
 
 	sti = stat_tracking_info(branch, &ours, &theirs, &full_base, 0, abf);
 	if (sti < 0) {
@@ -2258,6 +2348,9 @@ int format_tracking_info(struct branch *branch, struct strbuf *sb,
 
 	base = refs_shorten_unambiguous_ref(get_main_ref_store(the_repository),
 					    full_base, 0);
+
+	show_default_branch_comparison = !is_default_remote_branch(base);
+
 	if (upstream_is_gone) {
 		strbuf_addf(sb,
 			_("Your branch is based on '%s', but the upstream is gone.\n"),
@@ -2269,6 +2362,8 @@ int format_tracking_info(struct branch *branch, struct strbuf *sb,
 		strbuf_addf(sb,
 			_("Your branch is up to date with '%s'.\n"),
 			base);
+		if (show_default_branch_comparison)
+			format_default_branch_comparison(sb, branch->refname, abf);
 	} else if (abf == AHEAD_BEHIND_QUICK) {
 		strbuf_addf(sb,
 			    _("Your branch and '%s' refer to different commits.\n"),
@@ -2285,6 +2380,8 @@ int format_tracking_info(struct branch *branch, struct strbuf *sb,
 		if (advice_enabled(ADVICE_STATUS_HINTS))
 			strbuf_addstr(sb,
 				_("  (use \"git push\" to publish your local commits)\n"));
+		if (show_default_branch_comparison)
+			format_default_branch_comparison(sb, branch->refname, abf);
 	} else if (!ours) {
 		strbuf_addf(sb,
 			Q_("Your branch is behind '%s' by %d commit, "
@@ -2296,6 +2393,8 @@ int format_tracking_info(struct branch *branch, struct strbuf *sb,
 		if (advice_enabled(ADVICE_STATUS_HINTS))
 			strbuf_addstr(sb,
 				_("  (use \"git pull\" to update your local branch)\n"));
+		if (show_default_branch_comparison)
+			format_default_branch_comparison(sb, branch->refname, abf);
 	} else {
 		strbuf_addf(sb,
 			Q_("Your branch and '%s' have diverged,\n"
@@ -2310,6 +2409,8 @@ int format_tracking_info(struct branch *branch, struct strbuf *sb,
 		    advice_enabled(ADVICE_STATUS_HINTS))
 			strbuf_addstr(sb,
 				_("  (use \"git pull\" if you want to integrate the remote branch with yours)\n"));
+		if (show_default_branch_comparison)
+			format_default_branch_comparison(sb, branch->refname, abf);
 	}
 	free(base);
 	return 1;
diff --git a/t/t6040-tracking-info.sh b/t/t6040-tracking-info.sh
index 0b719bbae6..e2bd48f858 100755
--- a/t/t6040-tracking-info.sh
+++ b/t/t6040-tracking-info.sh
@@ -21,6 +21,7 @@ test_expect_success setup '
 	git clone . test &&
 	(
 		cd test &&
+		git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/main &&
 		git checkout -b b1 origin &&
 		git reset --hard HEAD^ &&
 		advance d &&
@@ -292,4 +293,249 @@ test_expect_success '--set-upstream-to @{-1}' '
 	test_cmp expect actual
 '
 
+test_expect_success 'setup for ahead of non-main tracking branch' '
+	(
+		cd test &&
+		git checkout -b feature origin/main &&
+		advance feature1 &&
+		git push origin feature &&
+		git checkout -b work --track origin/feature &&
+		advance work1 &&
+		advance work2
+	)
+'
+
+test_expect_success 'status shows ahead of both tracked branch and origin/main' '
+	(
+		cd test &&
+		git checkout work >/dev/null &&
+		git status --long -b | head -5
+	) >actual &&
+	cat >expect <<-\EOF &&
+On branch work
+Your branch is ahead of '\''origin/feature'\'' by 2 commits.
+  (use "git push" to publish your local commits)
+
+Ahead of '\''origin/main'\'' by 3 commits.
+EOF
+	test_cmp expect actual
+'
+
+test_expect_success 'checkout shows ahead of both tracked branch and origin/main' '
+	(
+		cd test &&
+		git checkout main >/dev/null &&
+		git checkout work 2>&1 | grep -E "(Switched|Your branch|Ahead of)" | head -3
+	) >actual &&
+	cat >expect <<-\EOF &&
+Switched to branch '\''work'\''
+Your branch is ahead of '\''origin/feature'\'' by 2 commits.
+Ahead of '\''origin/main'\'' by 3 commits.
+EOF
+	test_cmp expect actual
+'
+
+test_expect_success 'status tracking origin/main shows only main' '
+	(
+		cd test &&
+		git checkout b4 >/dev/null &&
+		git status --long -b
+	) >actual &&
+	test_grep "ahead of .origin/main. by 2 commits" actual &&
+	test_grep ! "Ahead of" actual
+'
+
+test_expect_success 'setup for ahead of tracked but diverged from main' '
+	(
+		cd test &&
+		git checkout origin/main &&
+		git checkout -b oldfeature &&
+		advance oldfeature1 &&
+		git push origin oldfeature &&
+		git checkout origin/main &&
+		advance main_newer &&
+		git push origin HEAD:main &&
+		git checkout -b work2 --track origin/oldfeature &&
+		advance work2_commit
+	)
+'
+
+test_expect_success 'status shows ahead of tracked and diverged from origin/main' '
+	(
+		cd test &&
+		git checkout work2 >/dev/null &&
+		git status --long -b | head -5
+	) >actual &&
+	cat >expect <<-\EOF &&
+On branch work2
+Your branch is ahead of '\''origin/oldfeature'\'' by 1 commit.
+  (use "git push" to publish your local commits)
+
+Diverged from '\''origin/main'\'' by 3 commits.
+EOF
+	test_cmp expect actual
+'
+
+test_expect_success 'setup for diverged from tracked but behind main' '
+	(
+		cd test &&
+		git fetch origin &&
+		git checkout origin/main &&
+		git checkout -b work2b &&
+		git branch --set-upstream-to=origin/oldfeature &&
+		git checkout origin/main &&
+		advance main_extra &&
+		git push origin HEAD:main
+	)
+'
+
+test_expect_success 'status shows diverged from tracked and behind origin/main' '
+	(
+		cd test &&
+		git checkout work2b >/dev/null &&
+		git status --long -b | head -6
+	) >actual &&
+	cat >expect <<-\EOF &&
+On branch work2b
+Your branch and '\''origin/oldfeature'\'' have diverged,
+and have 1 and 1 different commits each, respectively.
+  (use "git pull" if you want to integrate the remote branch with yours)
+
+Behind '\''origin/main'\'' by 1 commit.
+EOF
+	test_cmp expect actual
+'
+
+test_expect_success 'setup for behind tracked but ahead of main' '
+	(
+		cd test &&
+		git fetch origin &&
+		git checkout origin/main &&
+		git checkout -b feature3 &&
+		advance feature3_1 &&
+		advance feature3_2 &&
+		advance feature3_3 &&
+		git push origin feature3 &&
+		git checkout -b work3 --track origin/feature3 &&
+		git reset --hard HEAD~2
+	)
+'
+
+test_expect_success 'status shows behind tracked and ahead of origin/main' '
+	(
+		cd test &&
+		git checkout work3 >/dev/null &&
+		git status --long -b | head -5
+	) >actual &&
+	cat >expect <<-\EOF &&
+On branch work3
+Your branch is behind '\''origin/feature3'\'' by 2 commits, and can be fast-forwarded.
+  (use "git pull" to update your local branch)
+
+Ahead of '\''origin/main'\'' by 1 commit.
+EOF
+	test_cmp expect actual
+'
+
+test_expect_success 'setup upstream remote preference' '
+	(
+		cd test &&
+		git remote add upstream ../. &&
+		git fetch upstream &&
+		git symbolic-ref refs/remotes/upstream/HEAD refs/remotes/upstream/main
+	)
+'
+
+test_expect_success 'status prefers upstream remote over origin for comparison' '
+	(
+		cd test &&
+		git checkout work >/dev/null &&
+		git status --long -b | head -5
+	) >actual &&
+	cat >expect <<-\EOF &&
+On branch work
+Your branch is ahead of '\''origin/feature'\'' by 2 commits.
+  (use "git push" to publish your local commits)
+
+Diverged from '\''upstream/main'\'' by 5 commits.
+EOF
+	test_cmp expect actual
+'
+
+test_expect_success 'setup for up to date with tracked but ahead of default' '
+	(
+		cd test &&
+		git checkout origin/feature &&
+		git checkout -b synced_feature --track origin/feature &&
+		git checkout origin/main &&
+		advance main_ahead &&
+		git push origin HEAD:main
+	)
+'
+
+test_expect_success 'status shows up to date with tracked but diverged from default' '
+	(
+		cd test &&
+		git checkout synced_feature >/dev/null &&
+		git status --long -b | head -4
+	) >actual &&
+	cat >expect <<-\EOF &&
+On branch synced_feature
+Your branch is up to date with '\''origin/feature'\''.
+
+Diverged from '\''upstream/main'\'' by 3 commits.
+EOF
+	test_cmp expect actual
+'
+
+test_expect_success 'setup for up to date with tracked but ahead of origin/main' '
+	(
+		cd test &&
+		git remote remove upstream &&
+		git checkout origin/feature &&
+		git checkout -b synced_feature2 --track origin/feature &&
+		git checkout origin/main &&
+		advance main_ahead2 &&
+		git push origin HEAD:main
+	)
+'
+
+test_expect_success 'status shows up to date with tracked but diverged from origin/main' '
+	(
+		cd test &&
+		git checkout synced_feature2 >/dev/null &&
+		git status --long -b | head -4
+	) >actual &&
+	cat >expect <<-\EOF &&
+On branch synced_feature2
+Your branch is up to date with '\''origin/feature'\''.
+
+Diverged from '\''origin/main'\'' by 5 commits.
+EOF
+	test_cmp expect actual
+'
+
+test_expect_success 'setup for up to date with tracked but purely ahead of origin/main' '
+	(
+		cd test &&
+		git checkout origin/feature &&
+		git checkout -b synced_feature3 --track origin/feature
+	)
+'
+
+test_expect_success 'status shows up to date with tracked but shows default branch comparison' '
+	(
+		cd test &&
+		git checkout synced_feature3 >/dev/null &&
+		git status --long -b | head -4
+	) >actual &&
+	cat >expect <<-\EOF &&
+On branch synced_feature3
+Your branch is up to date with '\''origin/feature'\''.
+
+Diverged from '\''origin/main'\'' by 5 commits.
+EOF
+	test_cmp expect actual
+'
+
 test_done

base-commit: c4a0c8845e2426375ad257b6c221a3a7d92ecfda
-- 
gitgitgadget

^ permalink raw reply related	[flat|nested] 260+ messages in thread
* Re: [PATCH] checkout: add --autostash option for branch switching
@ 2026-03-12 14:40 Junio C Hamano
  2026-03-12 19:33 ` [PATCH v31 0/2] status: add status.compareBranches config for multiple branch comparisons Harald Nordgren
  0 siblings, 1 reply; 260+ messages in thread
From: Junio C Hamano @ 2026-03-12 14:40 UTC (permalink / raw)
  To: Harald Nordgren via GitGitGadget; +Cc: git, Harald Nordgren

"Harald Nordgren via GitGitGadget" <gitgitgadget@gmail.com> writes:

> From: Harald Nordgren <haraldnordgren@gmail.com>
>
> When switching branches, local modifications in the working tree can
> prevent the checkout from succeeding.  While "git rebase" and "git
> merge" already support --autostash to handle this case automatically,
> "git checkout" and "git switch" require users to manually stash and
> unstash their changes.
>
> Teach "git checkout" and "git switch" to accept --autostash and
> --no-autostash options that automatically create a temporary stash
> entry before the branch switch begins and apply it after the switch
> completes.  If the stash application results in conflicts, the stash
> entry is saved to the stash list so the user can resolve them later.
>
> Also add a checkout.autoStash configuration option that enables this
> behavior by default, which can be overridden with --no-autostash on
> the command line.

Unconditionally always stash when checkout happens?  This feature as
implemented does not have to be a separate feature.  It can be done
by end-users as a short-cut for "stash" followed by "checkout" via
alias or custom command.

Perhaps doing it this way would make it more worth doing?

 - At the beginning of branch switching, ask a new helper function
   that takes the branch we are switching to as an argument this
   question:

   Do any paths that are different between the current branch and
   the branch we are switching to have local (i.e., either in the
   index or in the working tree) change [Yes/No]?

 - When the answer is "yes", save the local changes to a new stash
   entry, and clear the local changes from the index and from the
   working tree.  If not, do not bother with stash at all.

 - Switch to other branch the usual way.  This will never conflict.

 - If we created a stash entry earlier, try to unstash it.  It may
   conflict or it may not.  

   - If it does not conflict, then we are done.  We drop that stash
     entry, and tell nothing about the stash to the user, as there
     is nothing they can do to the now-consumed stash.

   - If it does conflict, tell the user that the original change is
     in the stash, and can be used to recover if you botch the
     conflict resolution, and also tell the user that they need to
     drop the stash entry once they are done with the change that
     caused this current conflict.

Essentially, the new "autostaash only when needed" would become a
much better reimplementation of the "-m" option.  From the point of
view of a user who is used to "checkout -m", the basic workflow
would be the same, only with vast improvement.

 - It may not conflict and merge cleanly, in which case they do not
   have to do anything.  This is the same as status quo.

 - It may conflict and they find it too involved to resolve right at
   the moment, in which case they now have a choiceto say "git reset
   --hard", essentially declaring "I prioritize working on this new
   branch; I'll deal with the work in progress I started on the
   previous branch later", and then later they can "git stash pop"
   to deal with it.

   Which is a vast improvement over the current "-m" that gives you
   only one chance to resolve it right.

 - It may conflict and they may be able to resolve cleanly, in which
   case they have to remember that they need to do an extra thing
   (i.e., drop the stash we created just in case) but that may not
   be too bad a tradeoff.

If we can sell it as an improved implementation of "-m", we probably
can lose some code that the current "-m" implementation uses to do
its merge; we'd be instead using the "unstash" code paths.

And the new helper function to detect if switching from one commit
to another commit would never conflict can later be used to enhance
"git rebase" as well---we could call it N times to rebase a branch
with N commits and if all steps are clear, we do not have to insist
that there is no local changes like we do currently.

Hmm?

^ permalink raw reply	[flat|nested] 260+ messages in thread

end of thread, other threads:[~2026-03-12 19:33 UTC | newest]

Thread overview: 260+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-12-23  0:53 [PATCH] status: show default branch comparison when tracking non-default branch Harald Nordgren via GitGitGadget
2025-12-23  5:32 ` Junio C Hamano
2025-12-23 10:24   ` Harald Nordgren
2025-12-23 11:36     ` Harald Nordgren
2025-12-23 12:23       ` Chris Torek
2025-12-23 14:18         ` Harald Nordgren
2025-12-23 14:22           ` Chris Torek
2026-01-01 19:59         ` Another look? Harald Nordgren
2025-12-23 13:32     ` [PATCH] status: show default branch comparison when tracking non-default branch Junio C Hamano
2025-12-23 14:09       ` Harald Nordgren
2025-12-23 22:54 ` [PATCH v2 0/2] " Harald Nordgren via GitGitGadget
2025-12-23 22:54   ` [PATCH v2 1/2] status: show comparison with upstream default branch Harald Nordgren via GitGitGadget
2025-12-24  1:30     ` brian m. carlson
2025-12-24  1:46       ` Junio C Hamano
2026-01-01 20:01       ` Another look? Harald Nordgren
2025-12-23 22:54   ` [PATCH v2 2/2] Simplify default branch comparison logic Harald Nordgren via GitGitGadget
2025-12-24  0:00   ` [PATCH] status: show default branch comparison when tracking non-default branch Harald Nordgren
2025-12-24  9:31   ` [PATCH v3 0/3] " Harald Nordgren via GitGitGadget
2025-12-24  9:31     ` [PATCH v3 1/3] status: show comparison with upstream default branch Harald Nordgren via GitGitGadget
2025-12-24  9:31     ` [PATCH v3 2/3] Simplify default branch comparison logic Harald Nordgren via GitGitGadget
2025-12-24  9:31     ` [PATCH v3 3/3] Use repo.settings.statusGoalBranch config for status comparison Harald Nordgren via GitGitGadget
2025-12-24 10:19     ` [PATCH v4 0/4] status: show default branch comparison when tracking non-default branch Harald Nordgren via GitGitGadget
2025-12-24 10:19       ` [PATCH v4 1/4] status: show comparison with upstream default branch Harald Nordgren via GitGitGadget
2025-12-24 10:19       ` [PATCH v4 2/4] Simplify default branch comparison logic Harald Nordgren via GitGitGadget
2025-12-24 10:19       ` [PATCH v4 3/4] Use repo.settings.statusGoalBranch config for status comparison Harald Nordgren via GitGitGadget
2025-12-24 10:19       ` [PATCH v4 4/4] Rename default_remote to goal_branch Harald Nordgren via GitGitGadget
2025-12-24 10:38       ` [PATCH v5 0/5] status: show default branch comparison when tracking non-default branch Harald Nordgren via GitGitGadget
2025-12-24 10:38         ` [PATCH v5 1/5] status: show comparison with upstream default branch Harald Nordgren via GitGitGadget
2025-12-24 10:38         ` [PATCH v5 2/5] Simplify default branch comparison logic Harald Nordgren via GitGitGadget
2025-12-24 10:38         ` [PATCH v5 3/5] Use repo.settings.statusGoalBranch config for status comparison Harald Nordgren via GitGitGadget
2025-12-24 10:38         ` [PATCH v5 4/5] Rename default_remote to goal_branch Harald Nordgren via GitGitGadget
2025-12-24 10:38         ` [PATCH v5 5/5] Add warning for malformed statusGoalBranch config Harald Nordgren via GitGitGadget
2025-12-24 23:41         ` [PATCH v6 0/6] status: show default branch comparison when tracking non-default branch Harald Nordgren via GitGitGadget
2025-12-24 23:41           ` [PATCH v6 1/6] status: show comparison with upstream default branch Harald Nordgren via GitGitGadget
2025-12-24 23:41           ` [PATCH v6 2/6] Simplify default branch comparison logic Harald Nordgren via GitGitGadget
2025-12-24 23:41           ` [PATCH v6 3/6] Use repo.settings.statusGoalBranch config for status comparison Harald Nordgren via GitGitGadget
2025-12-24 23:41           ` [PATCH v6 4/6] Rename default_remote to goal_branch Harald Nordgren via GitGitGadget
2025-12-24 23:41           ` [PATCH v6 5/6] Add warning for malformed statusGoalBranch config Harald Nordgren via GitGitGadget
2025-12-24 23:41           ` [PATCH v6 6/6] Change config key to status.compareBranch Harald Nordgren via GitGitGadget
2025-12-25  8:00           ` [PATCH v6 0/6] status: show default branch comparison when tracking non-default branch Junio C Hamano
2025-12-25  9:45             ` [PATCH] " Harald Nordgren
2025-12-26  1:59               ` Junio C Hamano
2025-12-26 10:58                 ` Harald Nordgren
2025-12-25  9:45           ` [PATCH v7] status: additional comparison with goal branch Harald Nordgren via GitGitGadget
2025-12-25 12:33             ` [PATCH v8] status: show comparison with configured " Harald Nordgren via GitGitGadget
2025-12-28  9:16               ` Code review? Harald Nordgren
2025-12-28 19:37                 ` Junio C Hamano
2025-12-28 20:16                   ` Harald Nordgren
2025-12-28 23:09                     ` Ben Knoble
2025-12-29 12:17                       ` Triangular workflows Harald Nordgren
2026-01-01 19:49                         ` Code review? Harald Nordgren
2025-12-30 16:08                   ` Harald Nordgren
2025-12-28 11:46               ` [PATCH v8] status: show comparison with configured goal branch Junio C Hamano
2025-12-28 15:46                 ` Code review? Harald Nordgren
2025-12-28 15:41               ` [PATCH v9 0/2] status: show comparison with configured goal branch Harald Nordgren via GitGitGadget
2025-12-28 15:41                 ` [PATCH v9 1/2] " Harald Nordgren via GitGitGadget
2025-12-28 15:41                 ` [PATCH v9 2/2] improve tests Harald Nordgren via GitGitGadget
2025-12-30 16:08                 ` [PATCH v10 0/3] status: show additional comparison with push branch when different from tracking branch Harald Nordgren via GitGitGadget
2025-12-30 16:08                   ` [PATCH v10 1/3] status: show comparison with configured goal branch Harald Nordgren via GitGitGadget
2025-12-30 16:08                   ` [PATCH v10 2/3] improve tests Harald Nordgren via GitGitGadget
2025-12-30 16:08                   ` [PATCH v10 3/3] use pushRemote and tracking branch Harald Nordgren via GitGitGadget
2026-01-01 23:09                   ` [PATCH v10 0/3] status: show additional comparison with push branch when different from " Junio C Hamano
2026-01-01 23:38                     ` Another look? Harald Nordgren
2026-01-02  9:48                       ` Kristoffer Haugsbakk
2026-01-02 11:20                         ` Harald Nordgren
2026-01-12  7:34                           ` Kristoffer Haugsbakk
2026-01-04  2:17                       ` Junio C Hamano
2026-01-04  2:41                         ` Nico Williams
2026-01-04  4:17                           ` Junio C Hamano
2026-01-05 21:55                       ` D. Ben Knoble
2026-01-02 11:17                   ` [PATCH v11] status: show comparison with push remote tracking branch Harald Nordgren via GitGitGadget
2026-01-02 15:18                     ` Phillip Wood
2026-01-02 20:27                       ` Another look? Harald Nordgren
2026-01-03 10:04                         ` Phillip Wood
2026-01-03 13:00                           ` Harald Nordgren
2026-01-02 21:34                     ` [PATCH v12 0/2] status: show comparison with push remote tracking branch Harald Nordgren via GitGitGadget
2026-01-02 21:34                       ` [PATCH v12 1/2] refactor: format_branch_comparison in preparation Harald Nordgren via GitGitGadget
2026-01-02 21:34                       ` [PATCH v12 2/2] status: show comparison with push remote tracking branch Harald Nordgren via GitGitGadget
2026-01-03  3:08                       ` [PATCH v13 0/2] " Harald Nordgren via GitGitGadget
2026-01-03  3:08                         ` [PATCH v13 1/2] refactor: format_branch_comparison in preparation Harald Nordgren via GitGitGadget
2026-01-03  3:08                         ` [PATCH v13 2/2] status: show comparison with push remote tracking branch Harald Nordgren via GitGitGadget
2026-01-03 13:00                         ` [PATCH v14 0/2] " Harald Nordgren via GitGitGadget
2026-01-03 13:00                           ` [PATCH v14 1/2] refactor: format_branch_comparison in preparation Harald Nordgren via GitGitGadget
2026-01-04  4:40                             ` Junio C Hamano
2026-01-04 10:27                               ` Another look? Harald Nordgren
2026-01-04 10:48                                 ` Harald Nordgren
2026-01-05  1:16                                   ` Junio C Hamano
2026-01-03 13:00                           ` [PATCH v14 2/2] status: show comparison with push remote tracking branch Harald Nordgren via GitGitGadget
2026-01-04 11:53                           ` [PATCH v15 0/2] " Harald Nordgren via GitGitGadget
2026-01-04 11:53                             ` [PATCH v15 1/2] refactor format_branch_comparison in preparation Harald Nordgren via GitGitGadget
2026-01-04 11:53                             ` [PATCH v15 2/2] status: show comparison with push remote tracking branch Harald Nordgren via GitGitGadget
2026-01-04 23:21                             ` [PATCH v16 0/2] " Harald Nordgren via GitGitGadget
2026-01-04 23:21                               ` [PATCH v16 1/2] refactor format_branch_comparison in preparation Harald Nordgren via GitGitGadget
2026-01-05  2:05                                 ` Junio C Hamano
2026-01-05  9:15                                   ` Another look? Harald Nordgren
2026-01-05  9:46                                     ` Harald Nordgren
2026-01-05 12:28                                     ` Junio C Hamano
2026-01-05 13:16                                       ` Harald Nordgren
2026-01-05 22:13                                         ` Junio C Hamano
2026-01-06  0:08                                           ` ABQ Harald Nordgren
2026-01-08 10:19                                             ` ABQ Harald Nordgren
2026-01-04 23:21                               ` [PATCH v16 2/2] status: show comparison with push remote tracking branch Harald Nordgren via GitGitGadget
2026-01-05 10:17                               ` [PATCH v17 0/2] " Harald Nordgren via GitGitGadget
2026-01-05 10:17                                 ` [PATCH v17 1/2] refactor format_branch_comparison in preparation Harald Nordgren via GitGitGadget
2026-01-09 14:56                                   ` Phillip Wood
2026-01-09 15:23                                     ` Harald Nordgren
2026-01-05 10:17                                 ` [PATCH v17 2/2] status: show comparison with push remote tracking branch Harald Nordgren via GitGitGadget
2026-01-09 14:56                                   ` Phillip Wood
2026-01-09 16:00                                     ` [PATCH v17 1/2] refactor format_branch_comparison in preparation Harald Nordgren
2026-01-09 16:22                                       ` Ben Knoble
2026-01-09 16:32                                         ` Patrick Steinhardt
2026-01-09 18:03                                           ` Harald Nordgren
2026-01-12 14:45                                       ` Phillip Wood
2026-01-12 19:47                                         ` Harald Nordgren
2026-01-13 10:41                                           ` Phillip Wood
2026-01-13 12:11                                             ` Harald Nordgren
2026-01-09 16:41                                 ` [PATCH v18 0/2] status: show comparison with push remote tracking branch Harald Nordgren via GitGitGadget
2026-01-09 16:41                                   ` [PATCH v18 1/2] refactor format_branch_comparison in preparation Harald Nordgren via GitGitGadget
2026-01-09 16:41                                   ` [PATCH v18 2/2] status: show comparison with push remote tracking branch Harald Nordgren via GitGitGadget
2026-01-09 18:40                                   ` [PATCH v19 0/2] " Harald Nordgren via GitGitGadget
2026-01-09 18:40                                     ` [PATCH v19 1/2] refactor format_branch_comparison in preparation Harald Nordgren via GitGitGadget
2026-01-10  2:02                                       ` Junio C Hamano
2026-01-09 18:40                                     ` [PATCH v19 2/2] status: show comparison with push remote tracking branch Harald Nordgren via GitGitGadget
2026-01-10  2:13                                       ` Junio C Hamano
2026-01-10 11:14                                         ` [PATCH v17 1/2] refactor format_branch_comparison in preparation Harald Nordgren
2026-01-10 17:34                                           ` Junio C Hamano
2026-01-10  2:21                                       ` [PATCH v19 2/2] status: show comparison with push remote tracking branch Junio C Hamano
2026-01-10 11:06                                         ` [PATCH v17 1/2] refactor format_branch_comparison in preparation Harald Nordgren
2026-01-10 14:44                                           ` Harald Nordgren
2026-01-10 17:31                                           ` Junio C Hamano
2026-01-10 20:04                                             ` Harald Nordgren
2026-01-11  3:39                                               ` Junio C Hamano
2026-01-10 13:30                                     ` [PATCH v20 0/2] status: show comparison with push remote tracking branch Harald Nordgren via GitGitGadget
2026-01-10 13:30                                       ` [PATCH v20 1/2] refactor format_branch_comparison in preparation Harald Nordgren via GitGitGadget
2026-01-10 13:30                                       ` [PATCH v20 2/2] status: show comparison with push remote tracking branch Harald Nordgren via GitGitGadget
2026-01-10 15:24                                       ` [PATCH v21 0/2] " Harald Nordgren via GitGitGadget
2026-01-10 15:24                                         ` [PATCH v21 1/2] refactor format_branch_comparison in preparation Harald Nordgren via GitGitGadget
2026-01-10 15:24                                         ` [PATCH v21 2/2] status: show comparison with push remote tracking branch Harald Nordgren via GitGitGadget
2026-01-10 19:56                                         ` [PATCH v22 0/2] " Harald Nordgren via GitGitGadget
2026-01-10 19:56                                           ` [PATCH v22 1/2] refactor format_branch_comparison in preparation Harald Nordgren via GitGitGadget
2026-01-10 19:56                                           ` [PATCH v22 2/2] status: show comparison with push remote tracking branch Harald Nordgren via GitGitGadget
2026-01-12 20:26                                           ` [PATCH v23 0/2] " Harald Nordgren via GitGitGadget
2026-01-12 20:26                                             ` [PATCH v23 1/2] refactor format_branch_comparison in preparation Harald Nordgren via GitGitGadget
2026-01-12 20:26                                             ` [PATCH v23 2/2] status: show comparison with push remote tracking branch Harald Nordgren via GitGitGadget
2026-01-12 20:46                                               ` Junio C Hamano
2026-01-13  9:54                                                 ` [PATCH v17 1/2] refactor format_branch_comparison in preparation Harald Nordgren
2026-01-13  9:55                                             ` [PATCH v24 0/2] status: show comparison with push remote tracking branch Harald Nordgren via GitGitGadget
2026-01-13  9:55                                               ` [PATCH v24 1/2] refactor format_branch_comparison in preparation Harald Nordgren via GitGitGadget
2026-01-13  9:55                                               ` [PATCH v24 2/2] status: show comparison with push remote tracking branch Harald Nordgren via GitGitGadget
2026-01-13 12:11                                               ` [PATCH v25 0/2] " Harald Nordgren via GitGitGadget
2026-01-13 12:11                                                 ` [PATCH v25 1/2] refactor format_branch_comparison in preparation Harald Nordgren via GitGitGadget
2026-01-13 12:11                                                 ` [PATCH v25 2/2] status: show comparison with push remote tracking branch Harald Nordgren via GitGitGadget
2026-01-13 17:03                                                   ` Jeff King
2026-01-13 18:35                                                     ` Triangular workflow Harald Nordgren
2026-01-13 21:40                                                       ` Jeff King
2026-01-13 23:01                                                         ` Harald Nordgren
2026-01-14  2:22                                                           ` D. Ben Knoble
2026-01-14  7:59                                                             ` Harald Nordgren
2026-01-14 21:38                                                               ` Ben Knoble
2026-01-14  2:34                                                           ` Jeff King
2026-01-14  7:53                                                             ` Harald Nordgren
2026-01-14 16:24                                                               ` Jeff King
2026-01-14 17:48                                                                 ` Harald Nordgren
2026-01-14 21:01                                                                   ` Jeff King
2026-01-14 21:38                                                                 ` Ben Knoble
2026-01-14 22:17                                                                   ` Jeff King
2026-01-15 16:17                                                                     ` D. Ben Knoble
2026-01-14 14:15                                                             ` Junio C Hamano
2026-01-14 18:54                                                         ` Junio C Hamano
2026-01-14 21:10                                                           ` Jeff King
2026-01-14 21:38                                                             ` Ben Knoble
2026-01-14 23:08                                                               ` Harald Nordgren
2026-01-19  5:58                                                               ` Chris Torek
2026-01-20  8:35                                                                 ` Harald Nordgren
2026-01-14 23:12                                                           ` Harald Nordgren
2026-01-14 23:31                                                             ` Junio C Hamano
2026-01-18 19:58                                                           ` Harald Nordgren
2026-01-15 10:31                                                     ` [PATCH v25 2/2] status: show comparison with push remote tracking branch Phillip Wood
2026-01-15 13:38                                                       ` Junio C Hamano
2026-01-15 19:53                                                       ` Jeff King
2026-01-18 19:59                                                 ` [PATCH v26 0/2] status: add status.compareBranches config for multiple branch comparisons Harald Nordgren via GitGitGadget
2026-01-18 19:59                                                   ` [PATCH v26 1/2] refactor format_branch_comparison in preparation Harald Nordgren via GitGitGadget
2026-01-18 19:59                                                   ` [PATCH v26 2/2] status: add status.compareBranches config for multiple branch comparisons Harald Nordgren via GitGitGadget
2026-01-19  5:14                                                     ` Jeff King
2026-01-20  9:49                                                       ` Memory leak Harald Nordgren
2026-01-20 13:22                                                         ` Harald Nordgren
2026-01-20 21:42                                                           ` Junio C Hamano
2026-01-21 18:47                                                             ` Junio C Hamano
2026-01-21 20:49                                                               ` Jeff King
2026-01-22 15:03                                                               ` Harald Nordgren
2026-01-22 18:19                                                                 ` Junio C Hamano
2026-01-22 15:37                                                   ` [PATCH v27 0/2] status: add status.compareBranches config for multiple branch comparisons Harald Nordgren via GitGitGadget
2026-01-22 15:37                                                     ` [PATCH v27 1/2] refactor format_branch_comparison in preparation Harald Nordgren via GitGitGadget
2026-01-22 15:37                                                     ` [PATCH v27 2/2] status: add status.compareBranches config for multiple branch comparisons Harald Nordgren via GitGitGadget
2026-01-22 19:07                                                       ` Jeff King
2026-01-22 19:22                                                         ` [PATCH v27 0/2] " Harald Nordgren
2026-01-22 20:18                                                           ` Junio C Hamano
2026-01-22 20:37                                                       ` [PATCH v27 2/2] " Junio C Hamano
2026-01-22 20:56                                                         ` Harald Nordgren
2026-01-22 21:11                                                           ` Junio C Hamano
2026-01-22 21:36                                                             ` Junio C Hamano
2026-01-22 22:01                                                         ` Jeff King
2026-01-22 22:44                                                           ` Jeff King
2026-01-22 23:06                                                             ` Jeff King
2026-01-24  8:50                                                               ` Harald Nordgren
2026-01-25 17:29                                                                 ` Junio C Hamano
2026-02-08 13:33                                                               ` Harald Nordgren
2026-01-22 23:14                                                             ` Junio C Hamano
2026-01-22 18:53                                                     ` [PATCH v27 0/2] " Junio C Hamano
2026-01-22 19:09                                                       ` Harald Nordgren
2026-01-22 19:20                                                         ` Junio C Hamano
2026-01-22 19:24                                                           ` Harald Nordgren
2026-01-22 20:07                                                     ` [PATCH v28 " Harald Nordgren via GitGitGadget
2026-01-22 20:07                                                       ` [PATCH v28 1/2] refactor format_branch_comparison in preparation Harald Nordgren via GitGitGadget
2026-01-22 20:07                                                       ` [PATCH v28 2/2] status: add status.compareBranches config for multiple branch comparisons Harald Nordgren via GitGitGadget
2026-02-21  8:02                                                         ` Harald Nordgren
2026-02-21 17:17                                                           ` Junio C Hamano
2026-02-22 14:50                                                             ` D. Ben Knoble
2026-02-23 13:30                                                             ` Jeff King
2026-02-24 19:36                                                               ` Harald Nordgren
2026-02-24 22:21                                                               ` Junio C Hamano
2026-02-25 10:22                                                                 ` Harald Nordgren
2026-02-25 15:44                                                                   ` Junio C Hamano
2026-02-25 16:08                                                                     ` Jeff King
2026-02-25 16:52                                                                       ` Junio C Hamano
2026-02-26 13:50                                                                       ` Harald Nordgren
2026-02-25 17:04                                                                   ` D. Ben Knoble
2026-02-25 21:51                                                       ` [PATCH v29 0/2] " Harald Nordgren via GitGitGadget
2026-02-25 21:51                                                         ` [PATCH v29 1/2] refactor format_branch_comparison in preparation Harald Nordgren via GitGitGadget
2026-02-25 21:51                                                         ` [PATCH v29 2/2] status: add status.compareBranches config for multiple branch comparisons Harald Nordgren via GitGitGadget
2026-02-25 23:18                                                           ` Junio C Hamano
2026-02-26 13:47                                                             ` Harald Nordgren
2026-02-26 10:33                                                         ` [PATCH v30 0/2] " Harald Nordgren via GitGitGadget
2026-02-26 10:33                                                           ` [PATCH v30 1/2] refactor format_branch_comparison in preparation Harald Nordgren via GitGitGadget
2026-02-26 10:33                                                           ` [PATCH v30 2/2] status: add status.compareBranches config for multiple branch comparisons Harald Nordgren via GitGitGadget
2026-03-02 23:52                                                             ` Junio C Hamano
2026-03-04 10:30                                                               ` [PATCH v30 0/2] " Harald Nordgren
2026-02-26 15:28                                                           ` Junio C Hamano
2026-03-01 19:06                                                             ` Harald Nordgren
2026-03-01 19:25                                                               ` Kristoffer Haugsbakk
2026-03-02 16:52                                                               ` Junio C Hamano
2026-03-04 12:25                                                           ` [PATCH v31 " Harald Nordgren via GitGitGadget
2026-03-04 12:25                                                             ` [PATCH v31 1/2] refactor format_branch_comparison in preparation Harald Nordgren via GitGitGadget
2026-03-04 12:25                                                             ` [PATCH v31 2/2] status: add status.compareBranches config for multiple branch comparisons Harald Nordgren via GitGitGadget
2026-03-04 17:05                                                             ` [PATCH v31 0/2] " Junio C Hamano
2026-03-09  9:20                                                               ` Harald Nordgren
2026-03-09 15:10                                                                 ` Junio C Hamano
2026-01-10 17:41                                       ` [PATCH v20 0/2] status: show comparison with push remote tracking branch Junio C Hamano
2026-01-10 19:06                                         ` Harald Nordgren
2026-01-12  7:33                                           ` Kristoffer Haugsbakk
2025-12-23 23:11 ` [PATCH] status: show default branch comparison when tracking non-default branch Yee Cheng Chin
2025-12-23 23:59   ` Harald Nordgren
2025-12-24  0:55     ` Yee Cheng Chin
2025-12-24  0:38   ` Junio C Hamano
2025-12-24  0:49     ` Yee Cheng Chin
2025-12-24  1:44       ` Junio C Hamano
2025-12-24 10:24         ` Harald Nordgren
2026-01-01 20:05       ` Another look? Harald Nordgren
2025-12-24  1:12     ` [PATCH] status: show default branch comparison when tracking non-default branch Harald Nordgren
  -- strict thread matches above, loose matches on Subject: below --
2026-03-12 14:40 [PATCH] checkout: add --autostash option for branch switching Junio C Hamano
2026-03-12 19:33 ` [PATCH v31 0/2] status: add status.compareBranches config for multiple branch comparisons Harald Nordgren

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox