git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jonathan Nieder <jrnieder@gmail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: Thomas Rast <trast@student.ethz.ch>, git@vger.kernel.org
Subject: Re: [PATCH v2 2/4] Documentation: warn prominently against merging with dirty trees
Date: Sun, 10 Jan 2010 20:13:22 -0600	[thread overview]
Message-ID: <20100111021322.GA8480@progeny.tock> (raw)
In-Reply-To: <7vskaefp2v.fsf@alter.siamese.dyndns.org>

Junio C Hamano wrote:
> Jonathan Nieder <jrnieder@gmail.com> writes:

>> Oh, that is a problem.  Maybe 'git merge' should refuse to merge
>> unless told otherwise, if there is a dirty index and there might be
>> conflicts.
>
> "git reset --merge" will keep your local changes after such a merge, and
> "mergy" operations (not just "merge" but also "revert", "am -3", etc)
> won't get you into a situation where you cannot, by refusing to do
> anything when e.g. your index is dirty.  Especially when Christian's
> "reset --merge" update becomes solid, "... is hard to back out of" will
> become a false statement.

Here is a scenario I worry about:

Suppose I have a change to main.c staged, to add a feature that others
have discussed as well.  After a short distraction, I return and run
‘git pull’ to see what upstream has been working on.  As luck would
have it, the remote version of main.c is exactly the same as my
modified version, so the merge happily proceeds.  Some other files
merge cleanly.  Eventually there is some conflict.

Now I regret the pull.  Will ‘reset --merge’ restore the index and
work tree to its original state?

If the change to main.c was _not_ staged, then the merge would have
failed early, so that is not something to worry about.

> Of course, the user needs to understand what he or she is doing (see
> http://thread.gmane.org/gmane.comp.version-control.git/136166/focus=136171
> for example).

Agreed.  And probably the user who understands what is going on will
not make the mistake I described above.  Otherwise, they could succumb
to a related problem:

Suppose all is as above, except that git detects no conflict.  Suppose
further that some upstream commit was bogus.

Now I regret the pull.  How can I restore the index and work tree to
its original state?

If I reset --hard (or --merge) to the previous HEAD commit, the
modification to main.c is forgotten.  In practice, I would do
'git reset --hard HEAD^ && git checkout HEAD@{1} -- main.c'.

  parent reply	other threads:[~2010-01-11  2:14 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-01-07 17:03 [PATCH 1/2] Documentation/git-merge: reword references to "remote" and "pull" Thomas Rast
2010-01-07 17:03 ` [PATCH 2/2] Documentation: warn prominently against merging with dirty trees Thomas Rast
2010-01-07 17:03 ` [NON-PATCH 3/2] Documentation/git-merge: format full commands in typewriter font Thomas Rast
2010-01-07 20:25   ` Jonathan Nieder
2010-01-07 21:08   ` Junio C Hamano
2010-01-07 18:01 ` [PATCH 1/2] Documentation/git-merge: reword references to "remote" and "pull" Junio C Hamano
2010-01-10  0:02   ` [PATCH v2 0/4] Documentation style fixes Thomas Rast
2010-01-10  0:02     ` [PATCH v2 1/4] Documentation/git-merge: reword references to "remote" and "pull" Thomas Rast
2010-01-10  4:13       ` Jonathan Nieder
2010-01-10 12:24         ` Thomas Rast
2010-01-23 22:48           ` [PATCH] Documentation: merge: use MERGE_HEAD to refer to the remote branch Jonathan Nieder
2010-01-10  0:02     ` [PATCH v2 2/4] Documentation: warn prominently against merging with dirty trees Thomas Rast
2010-01-10  4:49       ` Jonathan Nieder
2010-01-10  6:31         ` Junio C Hamano
2010-01-10 12:16           ` Thomas Rast
2010-01-11  2:13           ` Jonathan Nieder [this message]
2010-01-11  2:30             ` Junio C Hamano
2010-01-11  4:13               ` Jonathan Nieder
2010-01-11  8:21                 ` [PATCH 0/6] " Jonathan Nieder
2010-01-11  8:27                   ` [PATCH/RFC 1/6] Documentation: clarify one-line description for merge Jonathan Nieder
2010-01-11  8:30                   ` [PATCH 2/6] Documentation: merge: add an overview Jonathan Nieder
2010-01-11 10:09                     ` Junio C Hamano
2010-01-11  8:37                   ` [PATCH 4/6] Documentation: emphasize when git merge terminates early Jonathan Nieder
2010-01-11 23:11                     ` Thomas Rast
2010-01-11  8:39                   ` [PATCH 5/6] Documentation: merge: add a section about fast-forward Jonathan Nieder
2010-01-11  8:43                   ` [PATCH 6/6] Documentation: tweak How Merge Works Jonathan Nieder
2010-01-11 23:11                     ` Thomas Rast
2010-01-13 10:44                   ` [PATCH 0/6] Re: Documentation: warn prominently against merging with dirty trees Petr Baudis
2010-01-13  6:55                 ` [PATCH v2 2/4] " Junio C Hamano
2010-01-10  0:02     ` [PATCH v2 3/4] Documentation: format full commands in typewriter font Thomas Rast
2010-01-10  3:31       ` Jonathan Nieder
2010-01-10  0:07     ` [PATCH v2 0/4] Documentation style fixes Thomas Rast
2010-01-10  0:19       ` Thomas Rast
2010-01-10  6:34       ` Junio C Hamano
2010-01-10 12:10         ` Thomas Rast
2010-01-10 12:10           ` [PATCH 1/2] More missed dashed 'git-cmd' forms Thomas Rast
2010-01-10 12:10             ` [PATCH 2/2] More missed `code snippets` Thomas Rast
2010-01-10 12:11           ` [PATCH] Documentation: show-files is now called git-ls-files Thomas Rast
2010-01-18  1:18         ` [PATCH v2 0/4] Documentation style fixes Junio C Hamano
2010-01-19 17:29           ` Thomas Rast
2010-01-19 17:39             ` Jonathan Nieder
2010-01-10  7:12       ` Junio C Hamano
     [not found]     ` <9516c897017ec420403bb7f687fb8962de42cb7c.1263081032.git.trast@student.ethz.ch>
2010-01-10  2:56       ` [PATCH v2 4/4] Documentation: spell 'git cmd' without dash throughout Jonathan Nieder
2010-01-10  2:59         ` [PATCH 1/2] Documentation: git gc packs refs by default now Jonathan Nieder
2010-01-10  3:01         ` [PATCH 2/2] Documentation: tiny git config manual tweaks Jonathan Nieder
2010-01-10 12:21         ` [PATCH v2 4/4] Documentation: spell 'git cmd' without dash throughout Thomas Rast

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=20100111021322.GA8480@progeny.tock \
    --to=jrnieder@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).