From: "Harald Nordgren via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Harald Nordgren <haraldnordgren@gmail.com>,
Harald Nordgren <haraldnordgren@gmail.com>
Subject: [PATCH] stash: allow custom conflict labels for pop
Date: Wed, 30 Sep 2026 20:58:49 +0000 [thread overview]
Message-ID: <pull.2430.git.git.1790801929375.gitgitgadget@gmail.com> (raw)
From: Harald Nordgren <haraldnordgren@gmail.com>
Since 13817db274 (stash: add --label-ours, --label-theirs, --label-base
for apply, 2026-04-28), "git stash apply" accepts custom labels for
conflict markers, but "git stash pop" does not, although it applies the
entry the same way and only differs by dropping it afterward. A caller
that wants its own labels has to use apply and drop the entry itself.
Teach "git stash pop" the same three options.
Signed-off-by: Harald Nordgren <haraldnordgren@gmail.com>
---
stash: allow custom conflict labels for pop
git stash pop now accepts the conflict label options that git stash
apply gained in 2.55.
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-2430%2FHaraldNordgren%2Fstash-pop-labels-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-2430/HaraldNordgren/stash-pop-labels-v1
Pull-Request: https://github.com/git/git/pull/2430
Documentation/git-stash.adoc | 4 ++--
builtin/stash.c | 11 +++++++++--
t/t3903-stash.sh | 23 +++++++++++++++++++++++
3 files changed, 34 insertions(+), 4 deletions(-)
diff --git a/Documentation/git-stash.adoc b/Documentation/git-stash.adoc
index fc6a9a008c..187b1a50d3 100644
--- a/Documentation/git-stash.adoc
+++ b/Documentation/git-stash.adoc
@@ -11,7 +11,7 @@ SYNOPSIS
git stash list [<log-options>]
git stash show [-u | --include-untracked | --only-untracked] [<diff-options>] [<stash>]
git stash drop [-q | --quiet] [<stash>]
-git stash pop [--index] [-q | --quiet] [<stash>]
+git stash pop [--index] [-q | --quiet] [--label-ours=<label>] [--label-theirs=<label>] [--label-base=<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]
@@ -198,7 +198,7 @@ apply the changes as they were originally).
`--label-ours=<label>`::
`--label-theirs=<label>`::
`--label-base=<label>`::
- These options are only valid for the `apply` command.
+ These options are only valid for `pop` and `apply` commands.
+
Use the given labels in conflict markers instead of the default
"Updated upstream", "Stashed changes", and "Stash base".
diff --git a/builtin/stash.c b/builtin/stash.c
index 7a9843413b..3a3c46d6cf 100644
--- a/builtin/stash.c
+++ b/builtin/stash.c
@@ -43,7 +43,7 @@
#define BUILTIN_STASH_DROP_USAGE \
N_("git stash drop [-q | --quiet] [<stash>]")
#define BUILTIN_STASH_POP_USAGE \
- N_("git stash pop [--index] [-q | --quiet] [<stash>]")
+ N_("git stash pop [--index] [-q | --quiet] [--label-ours=<label>] [--label-theirs=<label>] [--label-base=<label>] [<stash>]")
#define BUILTIN_STASH_APPLY_USAGE \
N_("git stash apply [--index] [-q | --quiet] [--label-ours=<label>] [--label-theirs=<label>] [--label-base=<label>] [<stash>]")
#define BUILTIN_STASH_BRANCH_USAGE \
@@ -885,11 +885,18 @@ static int pop_stash(int argc, const char **argv, const char *prefix,
int ret = -1;
int index = use_index;
int quiet = 0;
+ 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()
};
@@ -900,7 +907,7 @@ static int pop_stash(int argc, const char **argv, const char *prefix,
goto cleanup;
if ((ret = do_apply_stash(prefix, &info, index, quiet,
- NULL, NULL, NULL)))
+ label_ours, label_theirs, label_base)))
printf_ln(_("The stash entry is kept in case "
"you need it again."));
else
diff --git a/t/t3903-stash.sh b/t/t3903-stash.sh
index 721158606f..58a41f4c65 100755
--- a/t/t3903-stash.sh
+++ b/t/t3903-stash.sh
@@ -1841,6 +1841,29 @@ test_expect_success 'pop exits 1 on conflicts and keeps the stash entry' '
test_grep pop-stashed list
'
+test_expect_success 'pop with custom conflict labels' '
+ git reset --hard initial &&
+ test_commit pop-label-base conflict-file base-content &&
+ echo stashed >conflict-file &&
+ git stash push -m "stashed" &&
+ test_commit pop-label-upstream conflict-file upstream-content &&
+ test_expect_code 1 git -c merge.conflictStyle=diff3 stash pop --label-ours=UP --label-theirs=STASH &&
+ test_grep "^<<<<<<< UP" conflict-file &&
+ test_grep "^||||||| Stash base" conflict-file &&
+ test_grep "^>>>>>>> STASH" conflict-file
+'
+
+test_expect_success 'pop with empty conflict labels' '
+ git reset --hard initial &&
+ test_commit pop-empty-label-base conflict-file base-content &&
+ echo stashed >conflict-file &&
+ git stash push -m "stashed" &&
+ test_commit pop-empty-label-upstream conflict-file upstream-content &&
+ test_expect_code 1 git stash pop --label-ours= --label-theirs= &&
+ test_grep "^<<<<<<<$" conflict-file &&
+ test_grep "^>>>>>>>$" conflict-file
+'
+
test_expect_success 'stash branch exits with a non-1 status on errors' '
git reset --hard initial &&
echo stashed >file &&
base-commit: a018953688f1b10bddf91bff8747068f5f4746a4
--
gitgitgadget
next reply other threads:[~2026-09-30 20:58 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-30 20:58 Harald Nordgren via GitGitGadget [this message]
2026-09-30 21:33 ` [PATCH] stash: allow custom conflict labels for pop Junio C Hamano
2026-10-01 9:47 ` Phillip Wood
2026-10-01 17:58 ` Junio C Hamano
2026-10-02 7:21 ` Harald Nordgren
2026-10-02 14:31 ` Junio C Hamano
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.2430.git.git.1790801929375.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=git@vger.kernel.org \
--cc=haraldnordgren@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.