From: "Arsh Srivastava via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Phillip Wood <phillip.wood123@gmail.com>,
Arsh Srivastava <arshsrivastava00@gmail.com>,
Patrick Steinhardt <ps@pks.im>,
Karthik Nayak <karthik.188@gmail.com>,
Arsh Srivastava <arshsrivastava00@gmail.com>,
Arsh Srivastava <arshsrivastava00@gmail.com>
Subject: [PATCH v7] unpack-trees: suggest using 'git stash' when checkout fails
Date: Thu, 12 Mar 2026 20:05:01 +0000 [thread overview]
Message-ID: <pull.2233.v7.git.git.1773345901659.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.2233.v6.git.git.1773288013936.gitgitgadget@gmail.com>
From: Arsh Srivastava <arshsrivastava00@gmail.com>
When a branch switch fails due to local changes and
new users who are not familiar with the error message often
get confused about how to move ahead and resolve the issue as
the previous error message only suggests to commit or stash the changes
but doesn't explain how to do that or what the next steps are.
This patch enhances the error message with more specific
instructions in a concise manner to help users understand
how to resolve the issue and move their local changes
safely to the other branch using stash.
Signed-off-by: Arsh Srivastava <arshsrivastava00@gmail.com>
---
Advice on checkout dirty files
This is my submission for microproject [GSOC]
This patch extends the current message to help users better understand
risks and alternatives to stashing their changes.
The alternative consists of
> git checkout -m and its repercussions.
This extended message is tied to the existing advice.commitBeforeMerge
configuration and can be silenced with:
> git config set advice.commitBeforeMerge false
Changes:
> unpack-trees.c: expanded the already existing message.
> t/t6439-merge-co-error-msgs.sh: update expected output for merge and
> checkout tests. t/t7406-submodule-update.sh: update expected output
> for submodule checkout tests.
Signed-off-by: Arsh Srivastava arshsrivastava00@gmail.com
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-2233%2FArsh123344423%2Fadvice_on_checkout_dirty_files-v7
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-2233/Arsh123344423/advice_on_checkout_dirty_files-v7
Pull-Request: https://github.com/git/git/pull/2233
Range-diff vs v6:
1: e0ba5fad82 ! 1: 72cb550621 unpack-trees: suggesting 'git checkout -m' with its repercussions
@@ Metadata
Author: Arsh Srivastava <arshsrivastava00@gmail.com>
## Commit message ##
- unpack-trees: suggesting 'git checkout -m' with its repercussions
+ unpack-trees: suggest using 'git stash' when checkout fails
- This comment is an extention to the already existing stash comment.
- Added updated comment over the already existing function
- "setup_unpack_trees_porcelain" with "git checkout -m"
- and its repercussions
- I have also mentioned the repercussions of using "-m".
+ When a branch switch fails due to local changes and
+ new users who are not familiar with the error message often
+ get confused about how to move ahead and resolve the issue as
+ the previous error message only suggests to commit or stash the changes
+ but doesn't explain how to do that or what the next steps are.
- Signed-off-by: Arsh Srivastava arshsrivastava00@gmail.com
+ This patch enhances the error message with more specific
+ instructions in a concise manner to help users understand
+ how to resolve the issue and move their local changes
+ safely to the other branch using stash.
+
+ Signed-off-by: Arsh Srivastava <arshsrivastava00@gmail.com>
## t/t6439-merge-co-error-msgs.sh ##
-@@ t/t6439-merge-co-error-msgs.sh: error: Your local changes to the following files would be overwritten by checkou
+@@ t/t6439-merge-co-error-msgs.sh: cat >expect <<\EOF
+ error: Your local changes to the following files would be overwritten by checkout:
rep/one
rep/two
- Please commit your changes or stash them before you switch branches.
-+Try using 'git checkout -m <branch>' for a quick fix.
-+Please Note :- that using -m (merge) will not save your changes, rather would directly merge them.
-+Meaning if you are not able to resolve conflicts and does --hard reset your local changes would be gone.
+-Please commit your changes or stash them before you switch branches.
++To move you local changes safely to the other branch,
++Please try 'git stash' followed by 'git checkout <branch>' followed by 'git stash pop' for safe merge.
Aborting
EOF
-@@ t/t6439-merge-co-error-msgs.sh: error: Your local changes to the following files would be overwritten by checkou
+@@ t/t6439-merge-co-error-msgs.sh: cat >expect <<\EOF
+ error: Your local changes to the following files would be overwritten by checkout:
rep/one
rep/two
- Please commit your changes or stash them before you switch branches.
-+Try using 'git checkout -m <branch>' for a quick fix.
-+Please Note :- that using -m (merge) will not save your changes, rather would directly merge them.
-+Meaning if you are not able to resolve conflicts and does --hard reset your local changes would be gone.
+-Please commit your changes or stash them before you switch branches.
++To move you local changes safely to the other branch,
++Please try 'git stash' followed by 'git checkout <branch>' followed by 'git stash pop' for safe merge.
Aborting
EOF
## t/t7406-submodule-update.sh ##
@@ t/t7406-submodule-update.sh: test_expect_success 'submodule update should fail due to local changes' '
+ sed "s/^> //" >expect <<-\EOF &&
> error: Your local changes to the following files would be overwritten by checkout:
> file
- > Please commit your changes or stash them before you switch branches.
-+ > Try using '\''git checkout -m <branch>'\'' for a quick fix.
-+ > Please Note :- that using -m (merge) will not save your changes, rather would directly merge them.
-+ > Meaning if you are not able to resolve conflicts and does --hard reset your local changes would be gone.
+- > Please commit your changes or stash them before you switch branches.
++ > To move you local changes safely to the other branch,
++ > Please try '\''git stash'\'' followed by '\''git checkout <branch>'\'' followed by '\''git stash pop'\'' for safe merge.
> Aborting
> fatal: Unable to checkout OID in submodule path '\''submodule'\''
EOF
@@ unpack-trees.c: void setup_unpack_trees_porcelain(struct unpack_trees_options *o
? _("Your local changes to the following files would be overwritten by checkout:\n%%s"
- "Please commit your changes or stash them before you switch branches.")
- : _("Your local changes to the following files would be overwritten by checkout:\n%%s");
-+ "Please commit your changes or stash them before you switch branches.\n"
-+ "Try using 'git checkout -m <branch>' for a quick fix.\n"
-+ "Please Note :- that using -m (merge) will not save your changes, rather would directly merge them.\n"
-+ "Meaning if you are not able to resolve conflicts and does --hard reset your local changes would be gone."
++ "To move you local changes safely to the other branch,\n"
++ "Please try 'git stash' followed by 'git checkout <branch>' followed by 'git stash pop' for safe merge."
+ )
+ : _("Your local changes to the following files would be overwritten by checkout:\n%%s"
+ "Please commit your changes or stash them before you switch branches.");
t/t6439-merge-co-error-msgs.sh | 6 ++++--
t/t7406-submodule-update.sh | 3 ++-
unpack-trees.c | 7 +++++--
3 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/t/t6439-merge-co-error-msgs.sh b/t/t6439-merge-co-error-msgs.sh
index 643c9368e0..6ccc1e0416 100755
--- a/t/t6439-merge-co-error-msgs.sh
+++ b/t/t6439-merge-co-error-msgs.sh
@@ -76,7 +76,8 @@ cat >expect <<\EOF
error: Your local changes to the following files would be overwritten by checkout:
rep/one
rep/two
-Please commit your changes or stash them before you switch branches.
+To move you local changes safely to the other branch,
+Please try 'git stash' followed by 'git checkout <branch>' followed by 'git stash pop' for safe merge.
Aborting
EOF
@@ -98,7 +99,8 @@ cat >expect <<\EOF
error: Your local changes to the following files would be overwritten by checkout:
rep/one
rep/two
-Please commit your changes or stash them before you switch branches.
+To move you local changes safely to the other branch,
+Please try 'git stash' followed by 'git checkout <branch>' followed by 'git stash pop' for safe merge.
Aborting
EOF
diff --git a/t/t7406-submodule-update.sh b/t/t7406-submodule-update.sh
index 3adab12091..1ba15918a5 100755
--- a/t/t7406-submodule-update.sh
+++ b/t/t7406-submodule-update.sh
@@ -211,7 +211,8 @@ test_expect_success 'submodule update should fail due to local changes' '
sed "s/^> //" >expect <<-\EOF &&
> error: Your local changes to the following files would be overwritten by checkout:
> file
- > Please commit your changes or stash them before you switch branches.
+ > To move you local changes safely to the other branch,
+ > Please try '\''git stash'\'' followed by '\''git checkout <branch>'\'' followed by '\''git stash pop'\'' for safe merge.
> Aborting
> fatal: Unable to checkout OID in submodule path '\''submodule'\''
EOF
diff --git a/unpack-trees.c b/unpack-trees.c
index 998a1e6dc7..e817477926 100644
--- a/unpack-trees.c
+++ b/unpack-trees.c
@@ -128,8 +128,11 @@ void setup_unpack_trees_porcelain(struct unpack_trees_options *opts,
if (!strcmp(cmd, "checkout"))
msg = advice_enabled(ADVICE_COMMIT_BEFORE_MERGE)
? _("Your local changes to the following files would be overwritten by checkout:\n%%s"
- "Please commit your changes or stash them before you switch branches.")
- : _("Your local changes to the following files would be overwritten by checkout:\n%%s");
+ "To move you local changes safely to the other branch,\n"
+ "Please try 'git stash' followed by 'git checkout <branch>' followed by 'git stash pop' for safe merge."
+ )
+ : _("Your local changes to the following files would be overwritten by checkout:\n%%s"
+ "Please commit your changes or stash them before you switch branches.");
else if (!strcmp(cmd, "merge"))
msg = advice_enabled(ADVICE_COMMIT_BEFORE_MERGE)
? _("Your local changes to the following files would be overwritten by merge:\n%%s"
base-commit: d181b9354cf85b44455ce3ca9e6af0b9559e0ae2
--
gitgitgadget
next prev parent reply other threads:[~2026-03-12 20:05 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-10 8:51 [PATCH 0/5] Advice on checkout dirty files Arsh Srivastava via GitGitGadget
2026-03-10 8:51 ` [PATCH 1/5] diff: handle ANSI escape codes in prefix when calculating diffstat width LorenzoPegorari via GitGitGadget
2026-03-10 8:51 ` [PATCH 2/5] t4052: test for diffstat width when prefix contains ANSI escape codes LorenzoPegorari via GitGitGadget
2026-03-10 8:51 ` [PATCH 3/5] repo: remove unnecessary variable shadow K Jayatheerth via GitGitGadget
2026-03-10 8:51 ` [PATCH 4/5] The 13th batch Junio C Hamano via GitGitGadget
2026-03-10 8:51 ` [PATCH 5/5] advice: add stashBeforeCheckout advice for dirty branch switches Arsh Srivastava via GitGitGadget
2026-03-10 10:33 ` [PATCH 0/5] Advice on checkout dirty files Phillip Wood
2026-03-10 10:42 ` Arsh Srivastava
2026-03-10 10:45 ` Arsh Srivastava
2026-03-10 13:36 ` Junio C Hamano
2026-03-10 13:40 ` Arsh Srivastava
2026-03-10 15:40 ` Junio C Hamano
2026-03-10 16:05 ` Arsh Srivastava
2026-03-10 16:08 ` Arsh Srivastava
2026-03-10 10:59 ` [PATCH v2] advice: add stashBeforeCheckout advice for dirty branch switches Arsh Srivastava via GitGitGadget
[not found] ` <CAOAgETOebObfZNWA5LWMDxYv8YXYpbrb9L3_ASs_AbQjiQZYZw@mail.gmail.com>
2026-03-10 11:04 ` Arsh Srivastava
2026-03-10 13:16 ` Patrick Steinhardt
2026-03-10 13:36 ` Arsh Srivastava
2026-03-10 14:24 ` Patrick Steinhardt
2026-03-10 13:28 ` [PATCH v3 0/2] Advice on checkout dirty files Arsh Srivastava via GitGitGadget
2026-03-10 13:28 ` [PATCH v3 1/2] advice: add stashBeforeCheckout advice for dirty branch switches Arsh Srivastava via GitGitGadget
2026-03-10 13:43 ` Arsh Srivastava
2026-03-10 13:28 ` [PATCH v3 2/2] advice: add stashBeforeCheckout advice for dirty branch switches [GSOC] Arsh Srivastava via GitGitGadget
2026-03-11 8:50 ` [PATCH v4 0/5] Advice on checkout dirty files Arsh Srivastava via GitGitGadget
2026-03-11 8:50 ` [PATCH v4 1/5] advice: add stashBeforeCheckout advice for dirty branch switches Arsh Srivastava via GitGitGadget
2026-03-11 8:50 ` [PATCH v4 2/5] advice: add stashBeforeCheckout advice for dirty branch switches [GSOC] Arsh Srivastava via GitGitGadget
2026-03-11 8:50 ` [PATCH v4 3/5] unpack-trees: suggesting 'git checkout -m <branch>' with its repercussions Arsh Srivastava via GitGitGadget
2026-03-11 8:50 ` [PATCH v4 4/5] Updating tests and unpack-tress.c [GSOC] Arsh Srivastava via GitGitGadget
2026-03-11 8:50 ` [PATCH v4 5/5] File updation [GSOC] Arsh Srivastava via GitGitGadget
2026-03-11 16:38 ` [PATCH v4 0/5] Advice on checkout dirty files Junio C Hamano
2026-03-11 17:06 ` Arsh Srivastava
2026-03-11 17:49 ` [PATCH v5 0/3] " Arsh Srivastava via GitGitGadget
2026-03-11 17:49 ` [PATCH v5 1/3] advice: add stashBeforeCheckout advice for dirty branch switches Arsh Srivastava via GitGitGadget
2026-03-11 17:49 ` [PATCH v5 2/3] advice: add stashBeforeCheckout advice for dirty branch switches [GSOC] Arsh Srivastava via GitGitGadget
2026-03-11 17:49 ` [PATCH v5 3/3] unpack-trees: suggesting 'git checkout -m <branch>' with its repercussions Arsh Srivastava via GitGitGadget
2026-03-12 1:02 ` [PATCH v5 0/3] Advice on checkout dirty files Junio C Hamano
2026-03-12 3:32 ` Arsh Srivastava
2026-03-12 4:00 ` [PATCH v6] unpack-trees: suggesting 'git checkout -m' with its repercussions Arsh Srivastava via GitGitGadget
2026-03-12 16:06 ` Junio C Hamano
2026-03-12 18:13 ` Arsh Srivastava
2026-03-12 18:56 ` Junio C Hamano
2026-03-12 19:03 ` Arsh Srivastava
2026-03-12 19:07 ` Junio C Hamano
2026-03-12 19:12 ` Arsh Srivastava
2026-03-12 20:05 ` Arsh Srivastava via GitGitGadget [this message]
2026-03-12 22:40 ` [PATCH v7] unpack-trees: suggest using 'git stash' when checkout fails Junio C Hamano
2026-03-13 3:13 ` Arsh Srivastava
2026-03-13 10:43 ` Karthik Nayak
2026-03-13 11:02 ` Arsh Srivastava
2026-03-13 22:05 ` Junio C Hamano
2026-03-13 10:49 ` Arsh Srivastava
2026-03-13 11:04 ` Arsh Srivastava
2026-03-10 14:31 ` [PATCH v2] advice: add stashBeforeCheckout advice for dirty branch switches Karthik Nayak
2026-03-10 14:37 ` Arsh Srivastava
2026-03-10 14:40 ` Arsh Srivastava
2026-03-10 17:15 ` Karthik Nayak
2026-03-10 18:00 ` Arsh Srivastava
2026-03-10 14:41 ` Arsh Srivastava
2026-03-10 16:48 ` Junio C Hamano
2026-03-10 17:09 ` Karthik Nayak
2026-03-14 4:27 ` Konstantin Ryabitsev
2026-03-10 17:56 ` Arsh Srivastava
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.2233.v7.git.git.1773345901659.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=arshsrivastava00@gmail.com \
--cc=git@vger.kernel.org \
--cc=karthik.188@gmail.com \
--cc=phillip.wood123@gmail.com \
--cc=ps@pks.im \
/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