Git development
 help / color / mirror / Atom feed
From: "Harald Nordgren via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Phillip Wood <phillip.wood123@gmail.com>,
	Chris Torek <chris.torek@gmail.com>,
	Harald Nordgren <haraldnordgren@gmail.com>
Subject: [PATCH v9 0/4] checkout: 'autostash' for branch switching
Date: Fri, 10 Apr 2026 21:01:09 +0000	[thread overview]
Message-ID: <pull.2234.v9.git.git.1775854874.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.2234.v8.git.git.1775762235.gitgitgadget@gmail.com>

Harald Nordgren (4):
  stash: add --label-ours, --label-theirs, --label-base for apply
  sequencer: allow create_autostash to run silently
  sequencer: teach autostash apply to take optional conflict marker
    labels
  checkout: -m (--merge) uses autostash when switching branches

 Documentation/git-checkout.adoc |  58 +++++-----
 Documentation/git-stash.adoc    |  11 +-
 Documentation/git-switch.adoc   |  33 +++---
 builtin/checkout.c              | 138 ++++++++++------------
 builtin/stash.c                 |  32 ++++--
 sequencer.c                     |  67 ++++++++---
 sequencer.h                     |   4 +
 t/t3420-rebase-autostash.sh     |  24 +++-
 t/t3903-stash.sh                |  29 +++++
 t/t7201-co.sh                   | 195 ++++++++++++++++++++++++++++++++
 t/t7600-merge.sh                |   2 +-
 xdiff-interface.c               |  12 ++
 xdiff-interface.h               |   1 +
 xdiff/xmerge.c                  |   6 +-
 14 files changed, 455 insertions(+), 157 deletions(-)


base-commit: cd412a49627774a14b3e49237109a77bd3ea70c0
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-2234%2FHaraldNordgren%2Fcheckout_autostash-v9
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-2234/HaraldNordgren/checkout_autostash-v9
Pull-Request: https://github.com/git/git/pull/2234

Range-diff vs v8:

 1:  8fcf377820 ! 1:  5d5dc1f60e stash: add --ours-label, --theirs-label, --base-label for apply
     @@ Metadata
      Author: Harald Nordgren <haraldnordgren@gmail.com>
      
       ## Commit message ##
     -    stash: add --ours-label, --theirs-label, --base-label for apply
     +    stash: add --label-ours, --label-theirs, --label-base for apply
      
          Allow callers of "git stash apply" to pass custom labels for conflict
          markers instead of the default "Updated upstream" and "Stashed changes".
     @@ Documentation/git-stash.adoc: git stash list [<log-options>]
       git stash drop [-q | --quiet] [<stash>]
       git stash pop [--index] [-q | --quiet] [<stash>]
      -git stash apply [--index] [-q | --quiet] [<stash>]
     -+git stash apply [--index] [-q | --quiet] [--ours-label=<label>] [--theirs-label=<label>] [--base-label=<label>] [<stash>]
     ++git stash apply [--index] [-q | --quiet] [--label-ours=<label>] [--label-theirs=<label>] [--label-base=<label>] [<stash>]
       git stash branch <branchname> [<stash>]
       git stash [push] [-p | --patch] [-S | --staged] [-k | --[no-]keep-index] [-q | --quiet]
       	     [-u | --include-untracked] [-a | --all] [(-m | --message) <message>]
     @@ Documentation/git-stash.adoc: the index's ones. However, this can fail, when you
       (which are stored in the index, where you therefore can no longer
       apply the changes as they were originally).
       
     -+`--ours-label=<label>`::
     -+`--theirs-label=<label>`::
     -+`--base-label=<label>`::
     ++`--label-ours=<label>`::
     ++`--label-theirs=<label>`::
     ++`--label-base=<label>`::
      +	These options are only valid for the `apply` command.
      ++
      +Use the given labels in conflict markers instead of the default
      +"Updated upstream", "Stashed changes", and "Stash base".
     -+`--base-label` only has an effect with merge.conflictStyle=diff3.
     ++`--label-base` only has an effect with merge.conflictStyle=diff3.
      +
       `-k`::
       `--keep-index`::
     @@ builtin/stash.c
       	N_("git stash pop [--index] [-q | --quiet] [<stash>]")
       #define BUILTIN_STASH_APPLY_USAGE \
      -	N_("git stash apply [--index] [-q | --quiet] [<stash>]")
     -+	N_("git stash apply [--index] [-q | --quiet] [--ours-label=<label>] [--theirs-label=<label>] [--base-label=<label>] [<stash>]")
     ++	N_("git stash apply [--index] [-q | --quiet] [--label-ours=<label>] [--label-theirs=<label>] [--label-base=<label>] [<stash>]")
       #define BUILTIN_STASH_BRANCH_USAGE \
       	N_("git stash branch <branchname> [<stash>]")
       #define BUILTIN_STASH_STORE_USAGE \
     +@@ builtin/stash.c: static void unstage_changes_unless_new(struct object_id *orig_tree)
     + 		die(_("could not write index"));
     + }
     + 
     +-static int do_apply_stash(const char *prefix, struct stash_info *info,
     +-			  int index, int quiet)
     ++static int do_apply_stash_with_labels(const char *prefix,
     ++				      struct stash_info *info,
     ++				      int index, int quiet,
     ++				      const char *label_ours, const char *label_theirs,
     ++				      const char *label_base)
     + {
     + 	int clean, ret;
     + 	int has_index = index;
     +@@ builtin/stash.c: static int do_apply_stash(const char *prefix, struct stash_info *info,
     + 
     + 	init_ui_merge_options(&o, the_repository);
     + 
     +-	o.branch1 = "Updated upstream";
     +-	o.branch2 = "Stashed changes";
     +-	o.ancestor = "Stash base";
     ++	o.branch1 = label_ours ? label_ours : "Updated upstream";
     ++	o.branch2 = label_theirs ? label_theirs : "Stashed changes";
     ++	o.ancestor = label_base ? label_base : "Stash base";
     + 
     + 	if (oideq(&info->b_tree, &c_tree))
     + 		o.branch1 = "Version stash was based on";
     +@@ builtin/stash.c: restore_untracked:
     + 	return ret;
     + }
     + 
     ++static int do_apply_stash(const char *prefix, struct stash_info *info,
     ++			  int index, int quiet)
     ++{
     ++	return do_apply_stash_with_labels(prefix, info, index, quiet,
     ++					  NULL, NULL, NULL);
     ++}
     ++
     + static int apply_stash(int argc, const char **argv, const char *prefix,
     + 		       struct repository *repo UNUSED)
     + {
     + 	int ret = -1;
     + 	int quiet = 0;
     + 	int index = use_index;
     ++	const char *label_ours = NULL, *label_theirs = NULL, *label_base = NULL;
     + 	struct stash_info info = STASH_INFO_INIT;
     + 	struct option options[] = {
     + 		OPT__QUIET(&quiet, N_("be quiet, only report errors")),
     + 		OPT_BOOL(0, "index", &index,
     + 			 N_("attempt to recreate the index")),
     ++		OPT_STRING(0, "label-ours", &label_ours, N_("label"),
     ++			   N_("label for the upstream side in conflict markers")),
     ++		OPT_STRING(0, "label-theirs", &label_theirs, N_("label"),
     ++			   N_("label for the stashed side in conflict markers")),
     ++		OPT_STRING(0, "label-base", &label_base, N_("label"),
     ++			   N_("label for the base in diff3 conflict markers")),
     + 		OPT_END()
     + 	};
     + 
     +@@ builtin/stash.c: static int apply_stash(int argc, const char **argv, const char *prefix,
     + 	if (get_stash_info(&info, argc, argv))
     + 		goto cleanup;
     + 
     +-	ret = do_apply_stash(prefix, &info, index, quiet);
     ++	ret = do_apply_stash_with_labels(prefix, &info, index, quiet,
     ++					 label_ours, label_theirs, label_base);
     + cleanup:
     + 	free_stash_info(&info);
     + 	return ret;
      
       ## t/t3903-stash.sh ##
      @@ t/t3903-stash.sh: test_expect_success 'restore untracked files even when we hit conflicts' '
     @@ t/t3903-stash.sh: test_expect_success 'restore untracked files even when we hit
      +	git init conflict_labels &&
      +	(
      +		cd conflict_labels &&
     -+		echo base >file &&
     -+		git add file &&
     -+		git commit -m base &&
     ++		test_commit base file &&
      +		echo stashed >file &&
      +		git stash push -m "stashed" &&
     -+		echo upstream >file &&
     -+		git add file &&
     -+		git commit -m upstream &&
     -+		test_must_fail git -c merge.conflictStyle=diff3 stash apply --ours-label=UP --theirs-label=STASH &&
     ++		test_commit upstream file &&
     ++		test_must_fail git -c merge.conflictStyle=diff3 stash apply --label-ours=UP --label-theirs=STASH &&
      +		test_grep "^<<<<<<< UP" file &&
      +		test_grep "^||||||| Stash base" file &&
      +		test_grep "^>>>>>>> STASH" file
     @@ t/t3903-stash.sh: test_expect_success 'restore untracked files even when we hit
      +	git init empty_labels &&
      +	(
      +		cd empty_labels &&
     -+		echo base >file &&
     -+		git add file &&
     -+		git commit -m base &&
     ++		test_commit base file &&
      +		echo stashed >file &&
      +		git stash push -m "stashed" &&
     -+		echo upstream >file &&
     -+		git add file &&
     -+		git commit -m upstream &&
     -+		test_must_fail git stash apply --ours-label= --theirs-label= &&
     ++		test_commit upstream file &&
     ++		test_must_fail git stash apply --label-ours= --label-theirs= &&
      +		test_grep "^<<<<<<<$" file &&
      +		test_grep "^>>>>>>>$" file
      +	)
 2:  86cf68d024 ! 2:  a1fa04a965 sequencer: allow create_autostash to run silently
     @@ Commit message
      
          Add a silent parameter to create_autostash_internal and introduce
          create_autostash_ref_silent so that callers can create an autostash
     -    without printing the "Created autostash" message.  Use stderr for
     -    the message when not silent.
     +    without printing the "Created autostash" message.
      
          Signed-off-by: Harald Nordgren <haraldnordgren@gmail.com>
      
     @@ sequencer.c: static enum todo_command peek_command(struct todo_list *todo_list,
       				      const char *path,
      -				      const char *refname)
      +				      const char *refname,
     -+				      int silent)
     ++				      bool silent)
       {
       	struct strbuf buf = STRBUF_INIT;
       	struct lock_file lock_file = LOCK_INIT;
     @@ sequencer.c: static void create_autostash_internal(struct repository *r,
       
      -		printf(_("Created autostash: %s\n"), buf.buf);
      +		if (!silent)
     -+			fprintf(stderr, _("Created autostash: %s\n"), buf.buf);
     ++			printf(_("Created autostash: %s\n"), buf.buf);
       		if (reset_head(r, &ropts) < 0)
       			die(_("could not reset --hard"));
       		discard_index(r->index);
     @@ sequencer.c: static void create_autostash_internal(struct repository *r,
       void create_autostash(struct repository *r, const char *path)
       {
      -	create_autostash_internal(r, path, NULL);
     -+	create_autostash_internal(r, path, NULL, 0);
     ++	create_autostash_internal(r, path, NULL, false);
       }
       
       void create_autostash_ref(struct repository *r, const char *refname)
       {
      -	create_autostash_internal(r, NULL, refname);
     -+	create_autostash_internal(r, NULL, refname, 0);
     ++	create_autostash_internal(r, NULL, refname, false);
      +}
      +
      +void create_autostash_ref_silent(struct repository *r, const char *refname)
      +{
     -+	create_autostash_internal(r, NULL, refname, 1);
     ++	create_autostash_internal(r, NULL, refname, true);
       }
       
       static int apply_save_autostash_oid(const char *stash_oid, int attempt_apply)
 3:  78300e0e9a ! 3:  87216a633b sequencer: teach autostash apply to take optional conflict marker labels
     @@ Metadata
       ## Commit message ##
          sequencer: teach autostash apply to take optional conflict marker labels
      
     -    Add label1, label2, and label_ancestor parameters to the autostash
     +    Add label_ours, label_theirs, and label_base parameters to the autostash
          apply machinery so callers can pass custom conflict marker labels
     -    through to "git stash apply --ours-label/--theirs-label/--base-label".
     +    through to "git stash apply --label-ours/--label-theirs/--label-base".
          Introduce apply_autostash_ref_with_labels() for callers that want
          to pass labels.
      
     @@ Commit message
      
       ## sequencer.c ##
      @@ sequencer.c: void create_autostash_ref_silent(struct repository *r, const char *refname)
     - 	create_autostash_internal(r, NULL, refname, 1);
     + 	create_autostash_internal(r, NULL, refname, true);
       }
       
      -static int apply_save_autostash_oid(const char *stash_oid, int attempt_apply)
     @@ sequencer.c: static int apply_save_autostash_oid(const char *stash_oid, int atte
       		strvec_push(&child.args, "stash");
       		strvec_push(&child.args, "apply");
      +		if (label_ours)
     -+			strvec_pushf(&child.args, "--ours-label=%s", label_ours);
     ++			strvec_pushf(&child.args, "--label-ours=%s", label_ours);
      +		if (label_theirs)
     -+			strvec_pushf(&child.args, "--theirs-label=%s", label_theirs);
     ++			strvec_pushf(&child.args, "--label-theirs=%s", label_theirs);
      +		if (label_base)
     -+			strvec_pushf(&child.args, "--base-label=%s", label_base);
     ++			strvec_pushf(&child.args, "--label-base=%s", label_base);
       		strvec_push(&child.args, stash_oid);
       		ret = run_command(&child);
       	}
 4:  aa18313362 ! 4:  00e0b3196c checkout: -m (--merge) uses autostash when switching branches
     @@ builtin/checkout.c: static int switch_branches(const struct checkout_opts *opts,
       	int do_merge = 1;
      +	int created_autostash = 0;
      +	struct strbuf old_commit_shortname = STRBUF_INIT;
     -+	const char *stash_label_ancestor = NULL;
     ++	const char *stash_label_base = NULL;
       
       	trace2_cmd_mode("branch");
       
     @@ builtin/checkout.c: static int switch_branches(const struct checkout_opts *opts,
       	}
       
      +	if (old_branch_info.name)
     -+		stash_label_ancestor = old_branch_info.name;
     ++		stash_label_base = old_branch_info.name;
      +	else if (old_branch_info.commit) {
      +		strbuf_add_unique_abbrev(&old_commit_shortname,
      +					 &old_branch_info.commit->object.oid,
      +					 DEFAULT_ABBREV);
     -+		stash_label_ancestor = old_commit_shortname.buf;
     ++		stash_label_base = old_commit_shortname.buf;
      +	}
      +
       	if (do_merge) {
     @@ builtin/checkout.c: static int switch_branches(const struct checkout_opts *opts,
      +						       "CHECKOUT_AUTOSTASH",
      +						       new_branch_info->name,
      +						       "local",
     -+						       stash_label_ancestor);
     ++						       stash_label_base);
       			branch_info_release(&old_branch_info);
      +			strbuf_release(&old_commit_shortname);
       			return ret;
     @@ builtin/checkout.c: static int switch_branches(const struct checkout_opts *opts,
      +	}
      +	apply_autostash_ref_with_labels(the_repository, "CHECKOUT_AUTOSTASH",
      +				       new_branch_info->name, "local",
     -+				       stash_label_ancestor);
     ++				       stash_label_base);
      +
      +	discard_index(the_repository->index);
      +	if (repo_read_index(the_repository) < 0)
     @@ builtin/checkout.c: static int switch_branches(const struct checkout_opts *opts,
       	return ret || writeout_error;
       }
      
     - ## builtin/stash.c ##
     -@@ builtin/stash.c: static void unstage_changes_unless_new(struct object_id *orig_tree)
     - 		die(_("could not write index"));
     - }
     - 
     --static int do_apply_stash(const char *prefix, struct stash_info *info,
     --			  int index, int quiet)
     -+static int do_apply_stash_with_labels(const char *prefix,
     -+				      struct stash_info *info,
     -+				      int index, int quiet,
     -+				      const char *label1, const char *label2,
     -+				      const char *label_ancestor)
     - {
     - 	int clean, ret;
     - 	int has_index = index;
     -@@ builtin/stash.c: static int do_apply_stash(const char *prefix, struct stash_info *info,
     - 
     - 	init_ui_merge_options(&o, the_repository);
     - 
     --	o.branch1 = "Updated upstream";
     --	o.branch2 = "Stashed changes";
     --	o.ancestor = "Stash base";
     -+	o.branch1 = label1 ? label1 : "Updated upstream";
     -+	o.branch2 = label2 ? label2 : "Stashed changes";
     -+	o.ancestor = label_ancestor ? label_ancestor : "Stash base";
     - 
     - 	if (oideq(&info->b_tree, &c_tree))
     - 		o.branch1 = "Version stash was based on";
     -@@ builtin/stash.c: restore_untracked:
     - 	return ret;
     - }
     - 
     -+static int do_apply_stash(const char *prefix, struct stash_info *info,
     -+			  int index, int quiet)
     -+{
     -+	return do_apply_stash_with_labels(prefix, info, index, quiet,
     -+					  NULL, NULL, NULL);
     -+}
     -+
     - static int apply_stash(int argc, const char **argv, const char *prefix,
     - 		       struct repository *repo UNUSED)
     - {
     - 	int ret = -1;
     - 	int quiet = 0;
     - 	int index = use_index;
     -+	const char *label1 = NULL, *label2 = NULL, *label_ancestor = NULL;
     - 	struct stash_info info = STASH_INFO_INIT;
     - 	struct option options[] = {
     - 		OPT__QUIET(&quiet, N_("be quiet, only report errors")),
     - 		OPT_BOOL(0, "index", &index,
     - 			 N_("attempt to recreate the index")),
     -+		OPT_STRING(0, "ours-label", &label1, N_("label"),
     -+			   N_("label for the upstream side in conflict markers")),
     -+		OPT_STRING(0, "theirs-label", &label2, N_("label"),
     -+			   N_("label for the stashed side in conflict markers")),
     -+		OPT_STRING(0, "base-label", &label_ancestor, N_("label"),
     -+			   N_("label for the base in diff3 conflict markers")),
     - 		OPT_END()
     - 	};
     - 
     -@@ builtin/stash.c: static int apply_stash(int argc, const char **argv, const char *prefix,
     - 	if (get_stash_info(&info, argc, argv))
     - 		goto cleanup;
     - 
     --	ret = do_apply_stash(prefix, &info, index, quiet);
     -+	ret = do_apply_stash_with_labels(prefix, &info, index, quiet,
     -+					 label1, label2, label_ancestor);
     - cleanup:
     - 	free_stash_info(&info);
     - 	return ret;
     -
       ## sequencer.c ##
      @@ sequencer.c: static int apply_save_autostash_oid(const char *stash_oid, int attempt_apply,
       		strvec_push(&store.args, stash_oid);

-- 
gitgitgadget

  parent reply	other threads:[~2026-04-10 21:01 UTC|newest]

Thread overview: 164+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-12 13:26 [PATCH] checkout: add --autostash option for branch switching Harald Nordgren via GitGitGadget
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
2026-03-13 14:29   ` [PATCH] checkout: add --autostash option for branch switching Phillip Wood
2026-03-14 17:17     ` Junio C Hamano
2026-03-16 16:36       ` Phillip Wood
2026-03-16 20:04         ` Junio C Hamano
2026-03-17  9:47           ` Harald Nordgren
2026-03-19  8:25             ` Harald Nordgren
2026-03-19 16:48               ` Junio C Hamano
2026-03-31 12:16                 ` Harald Nordgren
2026-04-09 11:50                   ` Harald Nordgren
2026-04-09 12:06                   ` Harald Nordgren
2026-04-09 18:35                     ` Junio C Hamano
2026-04-09 21:29                       ` Harald Nordgren
2026-04-09 12:12                   ` Harald Nordgren
2026-03-12 19:33 ` [PATCH v2] " Harald Nordgren via GitGitGadget
2026-03-12 19:50   ` Junio C Hamano
2026-03-13  9:22     ` [PATCH] " Harald Nordgren
2026-03-13  9:23   ` [PATCH v3] " Harald Nordgren via GitGitGadget
2026-03-13 17:16     ` Junio C Hamano
2026-03-13 19:33       ` [PATCH] " Harald Nordgren
2026-03-13 20:30         ` Junio C Hamano
2026-03-14  9:59     ` [PATCH v4] checkout: -m (--merge) uses autostash when switching branches Harald Nordgren via GitGitGadget
2026-03-15  2:25       ` Junio C Hamano
2026-03-15 11:19       ` [PATCH v5 0/4] checkout: 'autostash' for branch switching Harald Nordgren via GitGitGadget
2026-03-15 11:19         ` [PATCH v5 1/4] stash: add --ours-label, --theirs-label, --base-label for apply Harald Nordgren via GitGitGadget
2026-03-15 11:19         ` [PATCH v5 2/4] sequencer: allow create_autostash to run silently Harald Nordgren via GitGitGadget
2026-03-15 11:19         ` [PATCH v5 3/4] sequencer: teach autostash apply to take optional conflict marker labels Harald Nordgren via GitGitGadget
2026-03-15 11:19         ` [PATCH v5 4/4] checkout: -m (--merge) uses autostash when switching branches Harald Nordgren via GitGitGadget
2026-03-17  9:35         ` [PATCH v6 0/4] checkout: 'autostash' for branch switching Harald Nordgren via GitGitGadget
2026-03-17  9:35           ` [PATCH v6 1/4] stash: add --ours-label, --theirs-label, --base-label for apply Harald Nordgren via GitGitGadget
2026-03-17  9:35           ` [PATCH v6 2/4] sequencer: allow create_autostash to run silently Harald Nordgren via GitGitGadget
2026-03-17  9:35           ` [PATCH v6 3/4] sequencer: teach autostash apply to take optional conflict marker labels Harald Nordgren via GitGitGadget
2026-03-17  9:35           ` [PATCH v6 4/4] checkout: -m (--merge) uses autostash when switching branches Harald Nordgren via GitGitGadget
2026-04-09 13:27           ` [PATCH v7 0/4] checkout: 'autostash' for branch switching Harald Nordgren via GitGitGadget
2026-04-09 13:27             ` [PATCH v7 1/4] stash: add --ours-label, --theirs-label, --base-label for apply Harald Nordgren via GitGitGadget
2026-04-09 17:25               ` Junio C Hamano
2026-04-09 20:31                 ` [PATCH] checkout: add --autostash option for branch switching Harald Nordgren
2026-04-09 13:27             ` [PATCH v7 2/4] sequencer: allow create_autostash to run silently Harald Nordgren via GitGitGadget
2026-04-09 13:27             ` [PATCH v7 3/4] sequencer: teach autostash apply to take optional conflict marker labels Harald Nordgren via GitGitGadget
2026-04-09 17:32               ` Junio C Hamano
2026-04-09 21:20                 ` [PATCH] checkout: add --autostash option for branch switching Harald Nordgren
2026-04-09 13:27             ` [PATCH v7 4/4] checkout: -m (--merge) uses autostash when switching branches Harald Nordgren via GitGitGadget
2026-04-09 17:55               ` Junio C Hamano
2026-04-09 20:32                 ` [PATCH] checkout: add --autostash option for branch switching Harald Nordgren
2026-04-09 17:00             ` [PATCH v7 0/4] checkout: 'autostash' " Junio C Hamano
2026-04-09 21:23               ` [PATCH] checkout: add --autostash option " Harald Nordgren
2026-04-09 19:17             ` [PATCH v8 0/4] checkout: 'autostash' " Harald Nordgren via GitGitGadget
2026-04-09 19:17               ` [PATCH v8 1/4] stash: add --ours-label, --theirs-label, --base-label for apply Harald Nordgren via GitGitGadget
2026-04-10 15:39                 ` Phillip Wood
2026-04-10 16:15                   ` Junio C Hamano
2026-04-10 19:18                   ` [PATCH] checkout: add --autostash option for branch switching Harald Nordgren
2026-04-09 19:17               ` [PATCH v8 2/4] sequencer: allow create_autostash to run silently Harald Nordgren via GitGitGadget
2026-04-10 15:39                 ` Phillip Wood
2026-04-10 16:16                   ` Junio C Hamano
2026-04-10 18:53                   ` [PATCH] checkout: add --autostash option for branch switching Harald Nordgren
2026-04-09 19:17               ` [PATCH v8 3/4] sequencer: teach autostash apply to take optional conflict marker labels Harald Nordgren via GitGitGadget
2026-04-10 15:39                 ` Phillip Wood
2026-04-10 16:34                   ` Junio C Hamano
2026-04-10 18:48                     ` [PATCH] checkout: add --autostash option for branch switching Harald Nordgren
2026-04-09 19:17               ` [PATCH v8 4/4] checkout: -m (--merge) uses autostash when switching branches Harald Nordgren via GitGitGadget
2026-04-09 23:49                 ` Chris Torek
2026-04-10 14:38                   ` [PATCH] checkout: add --autostash option for branch switching Harald Nordgren
2026-04-10 21:01               ` Harald Nordgren via GitGitGadget [this message]
2026-04-10 21:01                 ` [PATCH v9 1/4] stash: add --label-ours, --label-theirs, --label-base for apply Harald Nordgren via GitGitGadget
2026-04-10 21:01                 ` [PATCH v9 2/4] sequencer: allow create_autostash to run silently Harald Nordgren via GitGitGadget
2026-04-10 21:01                 ` [PATCH v9 3/4] sequencer: teach autostash apply to take optional conflict marker labels Harald Nordgren via GitGitGadget
2026-04-10 21:01                 ` [PATCH v9 4/4] checkout: -m (--merge) uses autostash when switching branches Harald Nordgren via GitGitGadget
2026-04-11 18:38                   ` Jeff King
2026-04-11 18:51                     ` [PATCH] checkout: add --autostash option for branch switching Harald Nordgren
2026-04-11 19:11                       ` Jeff King
2026-04-11 19:07                     ` [PATCH v9 4/4] checkout: -m (--merge) uses autostash when switching branches Jeff King
2026-04-10 21:53                 ` [PATCH v9 0/4] checkout: 'autostash' for branch switching Junio C Hamano
2026-04-12 11:51                 ` [PATCH v10 " Harald Nordgren via GitGitGadget
2026-04-12 11:51                   ` [PATCH v10 1/4] stash: add --label-ours, --label-theirs, --label-base for apply Harald Nordgren via GitGitGadget
2026-04-12 11:51                   ` [PATCH v10 2/4] sequencer: allow create_autostash to run silently Harald Nordgren via GitGitGadget
2026-04-12 11:51                   ` [PATCH v10 3/4] sequencer: teach autostash apply to take optional conflict marker labels Harald Nordgren via GitGitGadget
2026-04-12 11:51                   ` [PATCH v10 4/4] checkout: -m (--merge) uses autostash when switching branches Harald Nordgren via GitGitGadget
2026-04-12 20:01                   ` [PATCH v10 0/4] checkout: 'autostash' for branch switching Jeff King
2026-04-13 22:45                   ` Junio C Hamano
2026-04-14  7:29                     ` [PATCH] checkout: add --autostash option " Harald Nordgren
2026-04-14 13:29                       ` Junio C Hamano
2026-04-14 14:14                         ` Junio C Hamano
2026-04-14 17:42                         ` Junio C Hamano
2026-04-14 10:50                   ` [PATCH v11 0/4] checkout: 'autostash' " Harald Nordgren via GitGitGadget
2026-04-14 10:50                     ` [PATCH v11 1/4] stash: add --label-ours, --label-theirs, --label-base for apply Harald Nordgren via GitGitGadget
2026-04-14 10:50                     ` [PATCH v11 2/4] sequencer: allow create_autostash to run silently Harald Nordgren via GitGitGadget
2026-04-14 10:50                     ` [PATCH v11 3/4] sequencer: teach autostash apply to take optional conflict marker labels Harald Nordgren via GitGitGadget
2026-04-14 10:50                     ` [PATCH v11 4/4] checkout: -m (--merge) uses autostash when switching branches Harald Nordgren via GitGitGadget
2026-04-14 12:59                     ` [PATCH v12 0/4] checkout: 'autostash' for branch switching Harald Nordgren via GitGitGadget
2026-04-14 12:59                       ` [PATCH v12 1/4] stash: add --label-ours, --label-theirs, --label-base for apply Harald Nordgren via GitGitGadget
2026-04-14 14:05                         ` Phillip Wood
2026-04-14 16:23                           ` Junio C Hamano
2026-04-14 18:56                           ` [PATCH] checkout: add --autostash option for branch switching Harald Nordgren
2026-04-14 20:08                           ` Harald Nordgren
2026-04-15  9:34                             ` Phillip Wood
2026-04-15 15:34                               ` Harald Nordgren
2026-04-14 12:59                       ` [PATCH v12 2/4] sequencer: allow create_autostash to run silently Harald Nordgren via GitGitGadget
2026-04-14 14:06                         ` Phillip Wood
2026-04-14 18:35                           ` [PATCH] checkout: add --autostash option for branch switching Harald Nordgren
2026-04-14 12:59                       ` [PATCH v12 3/4] sequencer: teach autostash apply to take optional conflict marker labels Harald Nordgren via GitGitGadget
2026-04-14 14:06                         ` Phillip Wood
2026-04-14 18:44                           ` [PATCH] checkout: add --autostash option for branch switching Harald Nordgren
2026-04-14 12:59                       ` [PATCH v12 4/4] checkout: -m (--merge) uses autostash when switching branches Harald Nordgren via GitGitGadget
2026-04-14 14:07                         ` Phillip Wood
2026-04-14 16:39                           ` Junio C Hamano
2026-04-14 20:06                           ` [PATCH] checkout: add --autostash option for branch switching Harald Nordgren
2026-04-15  9:35                             ` Phillip Wood
2026-04-14 20:13                           ` Harald Nordgren
2026-04-15  8:19                             ` Harald Nordgren
2026-04-15  9:34                               ` Phillip Wood
2026-04-15  8:16                           ` Harald Nordgren
2026-04-15  9:36                             ` Phillip Wood
2026-04-14 15:56                       ` [PATCH v12 0/4] checkout: 'autostash' " Junio C Hamano
2026-04-14 20:16                         ` [PATCH] checkout: add --autostash option " Harald Nordgren
2026-04-14 20:56                           ` Junio C Hamano
2026-04-16 10:05                         ` Harald Nordgren
2026-04-16 14:45                           ` Junio C Hamano
2026-04-16 17:53                             ` Harald Nordgren
2026-04-15 11:11                       ` [PATCH v13 0/5] checkout: 'autostash' " Harald Nordgren via GitGitGadget
2026-04-15 11:11                         ` [PATCH v13 1/5] stash: add --label-ours, --label-theirs, --label-base for apply Harald Nordgren via GitGitGadget
2026-04-15 11:11                         ` [PATCH v13 2/5] sequencer: allow create_autostash to run silently Harald Nordgren via GitGitGadget
2026-04-15 11:11                         ` [PATCH v13 3/5] sequencer: teach autostash apply to take optional conflict marker labels Harald Nordgren via GitGitGadget
2026-04-15 11:11                         ` [PATCH v13 4/5] checkout: rollback lock on early returns in merge_working_tree Harald Nordgren via GitGitGadget
2026-04-15 11:11                         ` [PATCH v13 5/5] checkout -m: autostash when switching branches Harald Nordgren via GitGitGadget
2026-04-15 16:24                         ` [PATCH v14 0/5] checkout: 'autostash' for branch switching Harald Nordgren via GitGitGadget
2026-04-15 16:24                           ` [PATCH v14 1/5] stash: add --label-ours, --label-theirs, --label-base for apply Harald Nordgren via GitGitGadget
2026-04-15 16:24                           ` [PATCH v14 2/5] sequencer: allow create_autostash to run silently Harald Nordgren via GitGitGadget
2026-04-15 16:24                           ` [PATCH v14 3/5] sequencer: teach autostash apply to take optional conflict marker labels Harald Nordgren via GitGitGadget
2026-04-15 16:24                           ` [PATCH v14 4/5] checkout: rollback lock on early returns in merge_working_tree Harald Nordgren via GitGitGadget
2026-04-15 16:24                           ` [PATCH v14 5/5] checkout -m: autostash when switching branches Harald Nordgren via GitGitGadget
2026-04-24 15:47                             ` Phillip Wood
2026-04-24 20:52                               ` Comments on Phillip's review Harald Nordgren
2026-04-21  7:53                           ` [PATCH] checkout: add --autostash option for branch switching Harald Nordgren
2026-04-21  9:34                             ` Phillip Wood
2026-04-22 17:58                               ` Harald Nordgren
2026-04-24 15:52                           ` [PATCH v14 0/5] checkout: 'autostash' " Phillip Wood
2026-04-24 21:10                           ` [PATCH v15 " Harald Nordgren via GitGitGadget
2026-04-24 21:10                             ` [PATCH v15 1/5] stash: add --label-ours, --label-theirs, --label-base for apply Harald Nordgren via GitGitGadget
2026-04-28  9:32                               ` Phillip Wood
2026-04-28 15:16                                 ` [PATCH] checkout: add --autostash option for branch switching Harald Nordgren
2026-04-24 21:10                             ` [PATCH v15 2/5] sequencer: allow create_autostash to run silently Harald Nordgren via GitGitGadget
2026-04-28  9:32                               ` Phillip Wood
2026-04-24 21:10                             ` [PATCH v15 3/5] sequencer: teach autostash apply to take optional conflict marker labels Harald Nordgren via GitGitGadget
2026-04-28  9:33                               ` Phillip Wood
2026-04-28 15:21                                 ` [PATCH] checkout: add --autostash option for branch switching Harald Nordgren
2026-04-24 21:10                             ` [PATCH v15 4/5] checkout: rollback lock on early returns in merge_working_tree Harald Nordgren via GitGitGadget
2026-04-28  9:33                               ` Phillip Wood
2026-04-24 21:10                             ` [PATCH v15 5/5] checkout -m: autostash when switching branches Harald Nordgren via GitGitGadget
2026-04-28  9:35                               ` Phillip Wood
2026-04-28 18:08                                 ` [PATCH] checkout: add --autostash option for branch switching Harald Nordgren
2026-04-28  9:35                             ` [PATCH v15 0/5] checkout: 'autostash' " Phillip Wood
2026-04-28 18:39                             ` [PATCH v16 " Harald Nordgren via GitGitGadget
2026-04-28 18:39                               ` [PATCH v16 1/5] stash: add --label-ours, --label-theirs, --label-base for apply Harald Nordgren via GitGitGadget
2026-04-28 18:39                               ` [PATCH v16 2/5] sequencer: allow create_autostash to run silently Harald Nordgren via GitGitGadget
2026-04-28 18:39                               ` [PATCH v16 3/5] sequencer: teach autostash apply to take optional conflict marker labels Harald Nordgren via GitGitGadget
2026-04-28 18:39                               ` [PATCH v16 4/5] checkout: rollback lock on early returns in merge_working_tree Harald Nordgren via GitGitGadget
2026-04-28 18:39                               ` [PATCH v16 5/5] checkout -m: autostash when switching branches Harald Nordgren via GitGitGadget
2026-04-29 10:02                                 ` Phillip Wood
2026-04-29 10:02                               ` [PATCH v16 0/5] checkout: 'autostash' for branch switching Phillip Wood
2026-04-29 11:11                                 ` [PATCH] checkout: add --autostash option " Harald Nordgren
2026-05-07 20:11                               ` [PATCH v16 0/5] checkout: 'autostash' " Harald Nordgren
2026-05-08 13:02                                 ` Phillip Wood

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=pull.2234.v9.git.git.1775854874.gitgitgadget@gmail.com \
    --to=gitgitgadget@gmail.com \
    --cc=chris.torek@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=haraldnordgren@gmail.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox