From: Jonathan Nieder <jrnieder@gmail.com>
To: Nguyen Thai Ngoc Duy <pclouds@gmail.com>
Cc: Junio C Hamano <gitster@pobox.com>,
git@vger.kernel.org, Christian Couder <chriscool@tuxfamily.org>,
Michael J Gruber <git@drmicha.warpmail.net>,
Thomas Rast <trast@student.ethz.ch>
Subject: Re: [PATCH] reset: update help text
Date: Thu, 31 Mar 2011 13:42:46 -0500 [thread overview]
Message-ID: <20110331184246.GA19264@elie> (raw)
In-Reply-To: <AANLkTiknvWE9Fe3u88Jbis4Cgxd5ubqaR6MzYOJZ-AtM@mail.gmail.com>
Nguyen Thai Ngoc Duy wrote:
> To be honest, I have no idea what the above describes. I read 9bc454d
> (reset: add option "--keep" to "git reset" - 2010-01-19) and figured
> that --keep is like --merge except that "git diff" before and after
> the reset is exactly the same, is it? I have never used --keep before.
I use "git reset --keep" to
- discard a bad commit: git reset --keep HEAD^
- start working against a different commit:
git checkout -b topic &&
... hack hack hack without committing ... &&
: "oops, I thought I was on master but I was somewhere else" &&
git reset --keep master
The spirit of the thing[1] is:
* if the diff "HEAD -> <commit>" touch paths in which we have local
changes, error out;
* otherwise, checkout the relevant paths from <commit> but leave the
paths in which we have local changes alone.
which indeed means "git diff --cached" and "git diff" before and after
would be exactly the same. But there are some edge cases, in which
the diff "HEAD -> <commit>" makes the same change we did and the
reset --keep is still allowed.
This is totally different from --merge. The only legitimate use of
--merge is to cancel a merge you just performed, imho --- the effect
otherwise is too scary ("git add <path>; git reset --merge elsewhere"
--- bye, bye, changes made at <path>).
Hope that helps,
Jonathan
[1] Detailed semantics: for each path listed by "git diff --name-only
HEAD <commit>":
* if the worktree, index, and HEAD match, make the index and worktree
match <commit>.
* otherwise, if it is "not easy" to keep local changes, error out.
We are not going to do a three-way merge. That is,
- if the index matches neither HEAD nor <commit>, error out;
- if the index matches HEAD but not the worktree, error out.
* otherwise, it is "easy", so keep local changes.
- if the index already matches <commit>, leave the index and
worktree alone.
- if the index and worktree match HEAD, make them match the
<commit> instead.
These are the same rules used by fast-forward merges and plain
"git checkout".
next prev parent reply other threads:[~2011-03-31 18:43 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-29 13:20 [PATCH] reset: update help text Nguyễn Thái Ngọc Duy
2011-03-29 13:29 ` Nguyen Thai Ngoc Duy
2011-03-29 21:04 ` Jonathan Nieder
2011-03-31 12:31 ` Nguyen Thai Ngoc Duy
2011-03-31 18:42 ` Jonathan Nieder [this message]
2011-03-31 21:44 ` Junio C Hamano
2011-03-31 21:57 ` Jonathan Nieder
2011-04-02 8:43 ` Nguyen Thai Ngoc Duy
2011-03-31 18:45 ` 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=20110331184246.GA19264@elie \
--to=jrnieder@gmail.com \
--cc=chriscool@tuxfamily.org \
--cc=git@drmicha.warpmail.net \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=pclouds@gmail.com \
--cc=trast@student.ethz.ch \
/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.