public inbox for git@vger.kernel.org
 help / color / mirror / Atom feed
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>
Subject: [PATCH v5 0/3] Advice on checkout dirty files
Date: Wed, 11 Mar 2026 17:49:26 +0000	[thread overview]
Message-ID: <pull.2233.v5.git.git.1773251369.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.2233.v4.git.git.1773219028.gitgitgadget@gmail.com>

This is my submission for microproject [GSOC]

This patch adds a new advice type ADVICE_STASH_BEFORE_CHECKOUT to help users
when they attempt to switch branches with local modifications that would be
overwritten by the operation.

The new advice follows the same patterns established by existing advice
functions such as advise_on_updating_sparse_paths(). When triggered, it
lists the affected files and suggests using git stash push/pop to save and
restore local changes.

The advice can be silenced with:

git config set advice.stashBeforeCheckout false

Changes:

> advice.h: add ADVICE_STASH_BEFORE_CHECKOUT enum value advice.c: add
> "stashBeforeCheckout" to advice_setting[] and implement
> advise_on_checkout_dirty_files() function
> Documentation/config/advice.adoc: document the new advice key

Signed-off-by: Arsh Srivastava arshsrivastava00@gmail.com

Arsh Srivastava (3):
  advice: add stashBeforeCheckout advice for dirty branch switches
  advice: add stashBeforeCheckout advice for dirty branch switches
    [GSOC]
  unpack-trees: suggesting 'git checkout -m <branch>' with its
    repercussions

 t/t6439-merge-co-error-msgs.sh | 6 ++++++
 t/t7406-submodule-update.sh    | 3 +++
 unpack-trees.c                 | 9 +++++++--
 3 files changed, 16 insertions(+), 2 deletions(-)


base-commit: d181b9354cf85b44455ce3ca9e6af0b9559e0ae2
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-2233%2FArsh123344423%2Fadvice_on_checkout_dirty_files-v5
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-2233/Arsh123344423/advice_on_checkout_dirty_files-v5
Pull-Request: https://github.com/git/git/pull/2233

Range-diff vs v4:

 1:  eb5639dbc3 = 1:  eb5639dbc3 advice: add stashBeforeCheckout advice for dirty branch switches
 2:  e88c851701 = 2:  e88c851701 advice: add stashBeforeCheckout advice for dirty branch switches [GSOC]
 3:  4237b9667d ! 3:  1cc22f437e unpack-trees: suggesting 'git checkout -m <branch>' with its repercussions
     @@ advice.h: void NORETURN die_ff_impossible(void);
       
       #endif /* ADVICE_H */
      
     + ## 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
     + 	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.
     + Aborting
     + EOF
     + 
     +@@ t/t6439-merge-co-error-msgs.sh: error: Your local changes to the following files would be overwritten by checkou
     + 	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.
     + Aborting
     + EOF
     + 
     +
     + ## t/t7406-submodule-update.sh ##
     +@@ t/t7406-submodule-update.sh: test_expect_success 'submodule update should fail due to local changes' '
     + 	> 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.
     + 	> Aborting
     + 	> fatal: Unable to checkout OID in submodule path '\''submodule'\''
     + 	EOF
     +
       ## unpack-trees.c ##
      @@ unpack-trees.c: void setup_unpack_trees_porcelain(struct unpack_trees_options *opts,
       	if (!strcmp(cmd, "checkout"))
     @@ unpack-trees.c: void setup_unpack_trees_porcelain(struct unpack_trees_options *o
      -			  "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"
     ++			  "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."
      +			  )
      +		      : _("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."
     -+			  );
     ++				"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"
 4:  b25ea22410 < -:  ---------- Updating tests and unpack-tress.c [GSOC]
 5:  2ef7d5a3d6 < -:  ---------- File updation [GSOC]

-- 
gitgitgadget

  parent reply	other threads:[~2026-03-11 17:49 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       ` Arsh Srivastava via GitGitGadget [this message]
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           ` [PATCH v7] unpack-trees: suggest using 'git stash' when checkout fails Arsh Srivastava via GitGitGadget
2026-03-12 22:40             ` 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.v5.git.git.1773251369.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