From: Junio C Hamano <gitster@pobox.com>
To: Jeff King <peff@peff.net>
Cc: Dmitry Gutov <dgutov@yandex.ru>, git@vger.kernel.org
Subject: Re: How do I resolve conflict after popping stash without adding the file to index?
Date: Wed, 22 Apr 2015 12:45:21 -0700 [thread overview]
Message-ID: <xmqq8udkdk1a.fsf@gitster.dls.corp.google.com> (raw)
In-Reply-To: <20150422183540.GC3535@peff.net> (Jeff King's message of "Wed, 22 Apr 2015 14:35:41 -0400")
Jeff King <peff@peff.net> writes:
> Ironically, the message before e0e2a9c actually recommends staging
> changes before applying the stash, which would lead to this exact
> situation!
The ancient history is hazy to me, but did we fall back to three-way
merge in old days (or did anything to the index for that matter), I
wonder? In a world "git stash apply" only applied the change to the
working tree via "git apply", that old recommendation would make
perfect sense.
But obviously we do not live in such a world right now. And because
we are doing "merge-recursive", we should insist on a clean index;
otherwise there is no way to "undo" its effect without losing the
changes by the end-user.
> So I think the most trivial patch is:
>
> diff --git a/git-stash.sh b/git-stash.sh
> index d4cf818..f1865c9 100755
> --- a/git-stash.sh
> +++ b/git-stash.sh
> @@ -442,6 +442,7 @@ apply_stash () {
> assert_stash_like "$@"
>
> git update-index -q --refresh || die "$(gettext "unable to refresh index")"
> + git diff-index --cached HEAD || die "dirty index; cannot apply stash"
Yes, that makes sense. The original report from Dmitry was
triggering the safety from one line above and "git stash pop" doing
the right thing by refusing to touch the index with unresolved mergy
operation before doing anything, and with this additional safety, we
would make it even safer from people who do "git add" and then "git
stash pop" (which is somewhat strange thing to do, given that
"stash" was designed for "stash to save away; do other things; come
back to the original commit state that is 'reset --hard' clean;
unstash" sequence in the first place).
> # current index state
> c_tree=$(git write-tree) ||
>
> but it makes me wonder if somebody would find it annoying that they
> cannot apply a stash into their work-in-progress (i.e., it _might_ cause
> annoyance, but most of the time it will be convenient to do so).
They can always do "git stash show -p stash@{n} | git apply" if they
want to build changes incrementally X-<, but it would be annoying.
> So probably we'd want to refactor that into two separate functions, and
> only call the require_clean_index part.
Hmph, but what would that helper do, other than a single "diff-index
--quiet --cached HEAD" call?
next prev parent reply other threads:[~2015-04-22 19:45 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-20 21:02 How do I resolve conflict after popping stash without adding the file to index? Dmitry Gutov
2015-04-20 21:11 ` Junio C Hamano
2015-04-20 22:54 ` Dmitry Gutov
2015-04-21 21:29 ` Jeff King
2015-04-21 22:35 ` Dmitry Gutov
2015-04-21 22:52 ` Jeff King
2015-04-22 17:41 ` Junio C Hamano
2015-04-22 18:35 ` Jeff King
2015-04-22 19:29 ` Jeff King
2015-04-22 19:30 ` [PATCH 1/3] t3903: stop hard-coding commit sha1s Jeff King
2015-04-22 19:30 ` [PATCH 2/3] t3903: avoid applying onto dirty index Jeff King
2015-04-22 19:31 ` [PATCH 3/3] stash: require a clean index to apply Jeff King
2015-04-22 19:45 ` Junio C Hamano [this message]
2015-04-22 19:55 ` How do I resolve conflict after popping stash without adding the file to index? Jeff King
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=xmqq8udkdk1a.fsf@gitster.dls.corp.google.com \
--to=gitster@pobox.com \
--cc=dgutov@yandex.ru \
--cc=git@vger.kernel.org \
--cc=peff@peff.net \
/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.